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

neu*_*ima 10 java kotlin

我的kotlin文件:

class Chat(var name: String, var age: Int? = 18)
Run Code Online (Sandbox Code Playgroud)

我的java文件只能这样做:

new Chat("John",18);
Run Code Online (Sandbox Code Playgroud)

但我可以写这个吗?

new Chat("John");
Run Code Online (Sandbox Code Playgroud)

Bak*_*aii 17

来自Kotlin文件:

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

所以,如果你要初始化Chatname仅在Java中,你必须添加@JvmOverloads注释构造函数.

class Chat @JvmOverloads constructor(var name: String, var age: Int? = 18)
Run Code Online (Sandbox Code Playgroud)

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

public Chat(String name) {}
public Chat(String name, Integer age) {}
Run Code Online (Sandbox Code Playgroud)