我有以下代码片段,我想从同一代码库内部访问scriptDsl属性Java。我不想公开曝光scriptDsl。
class ScriptDsl {
internal val scriptDsl: JScriptDsl by lazy { //... }
}
Run Code Online (Sandbox Code Playgroud)
当编译时,scriptDsl变为,public final JScriptDsl getScriptDsl$esw_ocs_dsl_kt()但我想在此处提供自定义名称,这对于使用的非委托属性是可能的JvmName("scriptDsl")。怎么做呢internal delegated properties?
如果还有其他更好的解决方案,我很好,我的要求是“
scriptDsl在同一模块中从Java 调用ScriptDsl是公开的,我不希望scriptDsl在模块外部访问属性scriptDsl 必须懒惰,因为它依赖于声明时可能不可用的其他属性注意:我知道internalKotlin public中的Java。
来自kotlin文档:
内部声明在Java中公开。内部类的成员会经历名称重整,以使其更难从Java中意外使用它们,并允许重载具有相同签名且根据Kotlin规则彼此不可见的成员。
您可以像这样指定注释目标来获取:
class ScriptDsl {
@get:JvmName("scriptDsl")
internal val scriptDsl: JScriptDsl by lazy { //... }
}
Run Code Online (Sandbox Code Playgroud)
然后只需调用scriptDsl:
ScriptDsl scriptDsl = new ScriptDsl();
scriptDsl.scriptDsl();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30 次 |
| 最近记录: |