我正在调查kotlin,现在对下一件事感到好奇:
我有下一堂课:
class Test5 {
fun x(x: Int = 5) { }
}
我在字节码中看到生成下一个方法来桥接默认值:
public static synthetic bridge x$default(LTest5;IILjava/lang/Object;)V
ILOAD 2
ICONST_1
IAND
IFEQ L0
L1
LINENUMBER 4 L1
ICONST_5
ISTORE 1
L0
ALOAD 0
ILOAD 1
INVOKEVIRTUAL Test5.x (I)V
RETURN
MAXSTACK = 2
MAXLOCALS = 4
但是在Intelij中,我无法直接调用此方法。为什么不可能?它只是IDE技巧吗?
答案 0 :(得分:0)
您可以使用@JvmOverloads
对其进行注释,以便从Java中调用它。
来自documentation for @JvmOverloads
:
通常,如果您使用默认参数值编写Kotlin函数,它将仅在Java中显示为完整签名,并且所有参数都存在。如果您希望向Java调用者公开多个重载,则可以使用
@JvmOverloads
注释。注释也适用于构造函数,静态方法等。它不能用于抽象方法,包括接口中定义的方法。
示例:
class Test5 {
@JvmOverloads
fun x(x: Int = 5) { }
}