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

class ScriptDsl {
    internal val scriptDsl: JScriptDsl by lazy { //... }
}

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

如果还有其他更好的解决方案,我很好,我的要求是“
  • 我想在同一模块
  • 中从Java调用scriptDsl
  • 我使用反射调用它,因此需要事先知道名称
  • ScriptDsl是公共(public)的,我不希望在模块
  • 之外访问属性scriptDsl
  • scriptDsl必须是惰性的,因为它取决于声明
  • 时可能不可用的其他属性

    注意:我知道kotlin中的internal是Java中的public

    来自kotlin文档:

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

    最佳答案

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

    class ScriptDsl {
        @get:JvmName("scriptDsl")
        internal val scriptDsl: JScriptDsl by lazy { //... }
    }
    

    然后用scriptDsl调用它:
    ScriptDsl scriptDsl = new ScriptDsl();
    scriptDsl.scriptDsl();
    

    09-28 02:04