我有以下代码片段,我想从同一代码库内部从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
怎么做?如果还有其他更好的解决方案,我很好,我的要求是“
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();