【发布时间】:2019-10-22 13:21:16
【问题描述】:
我有以下代码 sn-p,我想从同一代码库内部访问来自 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 文档:
internal 声明在 Java 中公开。内部类的成员会经过名称修改,以防止在 Java 中意外使用它们,并允许重载具有相同签名但根据 Kotlin 规则看不到彼此的成员;
【问题讨论】: