在Java中调用Kotlin时,如何使用默认值省略构造函数参数?

r7xajy2e  于 2023-10-14  发布在  Java
关注(0)|答案(2)|浏览(164)

我的Kotlin文件:

  1. class Chat(var name: String, var age: Int? = 18)

java文件只能做到这一点:

  1. new Chat("John",18);

但我可以写这个吗?

  1. new Chat("John");
zbdgwd5y

zbdgwd5y1#

来自Kotlin文档:
通常情况下,如果您使用默认参数值编写一个Kotlin方法,则它在Java中仅作为完整签名可见,并且所有参数都存在。如果希望向Java调用方公开多个重载,可以使用@JvmOverloads注解。
所以,如果你只想在Java中用name初始化Chat,你必须在构造函数中添加@JvmOverloads注解。

  1. class Chat @JvmOverloads constructor(var name: String, var age: Int? = 18)

它将为每个具有默认值的参数生成额外的重载。

  1. public Chat(String name) {}
  2. public Chat(String name, Integer age) {}
jfgube3f

jfgube3f2#

公认的答案是正确的,但我想指出一件事-如果所有的构造函数参数都是可选的,那么将生成没有参数的构造函数,因此您不需要@JvmOverloads
例如,如果你在Kotlin中有:

  1. class MyEntity(var name: String = "alex", var age: Int = 18)

那么在Java字节码中,你将有一个all args构造函数,以及no-args构造函数,因此你将能够在Java中做这两件事:

  1. new MyEntity(); // no args
  2. new MyEntity("custom name", 24); // all args

没有任何额外的注解

相关问题