如何从Java隐藏Kotlin的lateinit var支持字段?

Mic*_*sin 10 java kotlin kotlin-lateinit

在Kotlin,假设,我有课:

class MyKotlinClass {
    lateinit var field: String
}
Run Code Online (Sandbox Code Playgroud)

根据文件:

延迟初始化的属性也作为字段公开.该字段的可见性将与lateinit属性设置器的可见性相同.

我可以在java代码中使用myKotlinClass.fieldmyKotlinClass.getField().我想禁用字段访问,只保留通过gettersetter访问.

我怎样才能实现这一目标并保持延迟修饰?

hot*_*key 13

您可以使用@JvmSyntheticJava中的隐藏声明(而不是来自Kotlin).只需注释属性的支持字段:

@field:JvmSynthetic
lateinit var field: String
Run Code Online (Sandbox Code Playgroud)

虽然该字段将保留public在字节码中,但它也将具有synthetic修饰符,从而阻止它在Java源代码中使用.但是,该字段似乎仍可通过运行时的反射访问.

另见:另一个问题@JvmSynthetic(虽然没有明确的答案).