我有以下代码片段,我想从Java
内部从同一代码库访问scriptDsl
属性。我不想公开揭露scriptDsl
。
class ScriptDsl {
internal val scriptDsl: JScriptDsl by lazy { //... }
}
编译后,scriptDsl
变得public final JScriptDsl getScriptDsl$esw_ocs_dsl_kt()
但我想在这里提供自定义名称,这对于使用JvmName("scriptDsl")
的非委托属性是可能的。 如何为internal delegated properties
做到这一点?
如果有其他更好的解决方案,我很好,我的要求是">
- 我想在同一模块中从 java 调用
scriptDsl
- 我使用反射来称呼它,所以需要事先知道这个名字
ScriptDsl
是公共的,我不希望在模块外部访问属性scriptDsl
scriptDsl
必须懒惰,因为它依赖于其他属性,这些属性在声明时可能不可用
注意:我知道 kotlin 中的internal
在 java 中是public
的。
来自 kotlin 文档:
内部声明在 Java 中是公开的。内部类的成员会经历名称重整,以使其更难从 Java 意外使用它们,并允许重载具有相同签名的成员,这些成员根据 Kotlin 规则看不到彼此;
您可以像这样指定 getter 的注释目标:
class ScriptDsl {
@get:JvmName("scriptDsl")
internal val scriptDsl: JScriptDsl by lazy { //... }
}
然后只需用scriptDsl
调用它:
ScriptDsl scriptDsl = new ScriptDsl();
scriptDsl.scriptDsl();