@JvmSynthetic
我在 kotlin-stdlib 中遇到过注释,我想知道它的用途,但不幸的是,它没有记录。(UPD:就在那一刻)
据我了解,将其应用于程序元素会将synthetic
修饰符添加到相应的字节码元素中。结果,该元素在 Java 中变得不可见:
class MyClass {
@JvmSynthetic
fun f() { }
}
Java代码中的某处:
MyClass c = new MyClass();
c.f() // Error: cannot resolve method f()
但是在 Kotlin 代码中仍然可以看到相同的元素:
val c = MyClass()
c.f() // OK
隐藏来自非 Kotlin 来源的声明是否有效使用@JvmSynthetic
? 是预期用途吗?其他合适的用例是什么?
由于@JvmSynthetic
隐藏了 Java 中的函数,因此它们也不能在 Java 中被覆盖(当涉及到abstract
成员时,调用结果会变成AbstractMethodError
)。鉴于此,我可以@JvmSynthetic
用来禁止在 Java 源代码中覆盖 Kotlin 类的成员吗?