Tag: 合成

Kotlin中@JvmSynthetic的用途是什么?

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