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

时间:2017-08-14 03:21:53

标签: java kotlin

我的kotlin文件:

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

我的java文件只能这样做:

new Chat("John",18);

但我可以写这个吗?

new Chat("John");

1 个答案:

答案 0 :(得分:17)

来自Kotlin document

  

通常,如果您使用默认参数值编写Kotlin方法,它将仅在Java中显示为完整签名,并且所有参数都存在。如果您希望向Java调用者公开多个重载,可以使用@JvmOverloads注释。

因此,如果您只想在Java中使用Chat初始化name,则必须向构造函数添加@JvmOverloads注释。

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

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

public Chat(String name) {}
public Chat(String name, Integer age) {}