是否可以为Kotlin中的内部委托属性提供自定义名称?

Pri*_*dam 3 java kotlin

我有以下代码片段,我想从同一代码库内部访问scriptDsl属性Java。我不想公开曝光scriptDsl

class ScriptDsl {
    internal val scriptDsl: JScriptDsl by lazy { //... }
}
Run Code Online (Sandbox Code Playgroud)

当编译时,scriptDsl变为,public final JScriptDsl getScriptDsl$esw_ocs_dsl_kt()但我想在此处提供自定义名称,这对于使用的非委托属性是可能的JvmName("scriptDsl")。怎么做呢internal delegated properties

如果还有其他更好的解决方案,我很好,我的要求是“

  • 我想scriptDsl在同一模块中从Java 调用
  • 我用反射来称呼它,所以需要事先知道名字
  • ScriptDsl是公开的,我不希望scriptDsl在模块外部访问属性
  • scriptDsl 必须懒惰,因为它依赖于声明时可能不可用的其他属性

注意:我知道internalKotlin public中的Java。

来自kotlin文档:

内部声明在Java中公开。内部类的成员会经历名称重整,以使其更难从Java中意外使用它们,并允许重载具有相同签名且根据Kotlin规则彼此不可见的成员。

And*_*ana 6

您可以像这样指定注释目标来获取:

class ScriptDsl {
    @get:JvmName("scriptDsl")
    internal val scriptDsl: JScriptDsl by lazy { //... }
}
Run Code Online (Sandbox Code Playgroud)

然后只需调用scriptDsl

ScriptDsl scriptDsl = new ScriptDsl();
scriptDsl.scriptDsl();
Run Code Online (Sandbox Code Playgroud)