interface Test {
fun test(message: String, delay: Int =100)
}
class A: Test
{
override fun test(message: String, delay: Int) {
}
}
我发现我无法在接口或类中使用 @JvmOverloads
。
如果我在接口中添加 @JvmOverloads
,错误信息为 @JvmOverloads 注释不能用于接口方法
,如果我在类中添加 @JvmOverloads
,错误信息为 平台声明冲突....
不过,在 Kotlin 文件中,我似乎可以使用默认参数,例如:
var a=A()
a.test("1234")
但是当我在Java文件中使用它时,似乎该方法没有进行重载。
A a=new A();
a.test("123");//Compile error
以下无界面版本可以正常工作。
class A
{
@JvmOverloads
fun test(message: String, delay: Int=100) {
}
}
然后我可以在Java文件中正常使用它。
A a=new A();
a.test("123");
当添加接口后如何保持相同的功能性?
foo
,还会生成另外一个方法foo$default
,它也接收一个位掩码,指示应该用默认值替换哪些参数。所有由@JvmOverloads
生成的重载方法也会调用此方法。 - hotkey