我有以下代码片段,我想从同一代码库内部访问 Java
的 scriptDsl
属性。我不想公开公开 scriptDsl
。
class ScriptDsl {
internal val scriptDsl: JScriptDsl by lazy { //... }
}
编译后,scriptDsl
变为 public final JScriptDsl getScriptDsl$esw_ocs_dsl_kt()
但我想在这里提供自定义名称,这对于使用 JvmName 的非委托(delegate)属性是可能的("scriptDsl")
。
如何为内部委托(delegate)属性
做这件事?
如果有其他更好的方案我也可以,我的要求是"
- 我想在同一模块中从 java 调用
scriptDsl
- 我使用反射调用它,所以需要事先知道名称
ScriptDsl
是公开的,我不希望在模块外部访问属性scriptDsl
scriptDsl
必须是惰性的,因为它依赖于其他在声明时可能不可用的属性
注意:我知道 kotlin 中的 internal
是 java 中的 public
。
来自 Kotlin 文档:
internal 声明在 Java 中公开。内部类的成员经过名称重整,以防止从 Java 中意外使用它们,并允许根据 Kotlin 规则重载具有相同签名但彼此看不到的成员;
最佳答案
您可以像这样将注释目标指定为 getter:
class ScriptDsl {
@get:JvmName("scriptDsl")
internal val scriptDsl: JScriptDsl by lazy { //... }
}
然后用scriptDsl
调用它:
ScriptDsl scriptDsl = new ScriptDsl();
scriptDsl.scriptDsl();
关于java - 是否可以为 kotlin 中的内部委托(delegate)属性提供自定义名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497383/