为什么我无法在Kotlin中访问自动生成的默认方法?

时间:2018-02-24 14:13:03

标签: java kotlin

我正在调查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技巧吗?

1 个答案:

答案 0 :(得分:0)

您可以使用@JvmOverloads对其进行注释,以便从Java中调用它。

来自documentation for @JvmOverloads

  

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

     

注释也适用于构造函数,静态方法等。它不能用于抽象方法,包括接口中定义的方法。

示例:

class Test5 {
    @JvmOverloads
    fun x(x: Int = 5) { }
}