【问题标题】:is it possible to provide custom name for internal delegated properties in kotlin?是否可以在 kotlin 中为内部委托属性提供自定义名称?
【发布时间】:2019-10-22 13:21:16
【问题描述】:

我有以下代码 sn-p,我想从同一代码库内部访问来自 JavascriptDsl 属性。我不想公开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 文档:

internal 声明在 Java 中公开。内部类的成员会经过名称修改,以防止在 Java 中意外使用它们,并允许重载具有相同签名但根据 Kotlin 规则看不到彼此的成员;

【问题讨论】:

    标签: java kotlin


    【解决方案1】:

    你可以像这样指定你的注解目标:

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

    然后用scriptDsl调用它:

    ScriptDsl scriptDsl = new ScriptDsl();
    scriptDsl.scriptDsl();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2018-05-27
      • 2014-02-24
      • 2011-12-04
      • 2023-04-02
      相关资源
      最近更新 更多