为什么从java调用kotlin对象时会得到一个奇怪的方法名?
在kotlin中,我有一个被转换为对象的类,现在当我从java调用它时,方法名被附加$app。这是什么意思 Kotlin为什么从java调用kotlin对象时会得到一个奇怪的方法名?,java,android,kotlin,Java,Android,Kotlin,在kotlin中,我有一个被转换为对象的类,现在当我从java调用它时,方法名被附加$app。这是什么意思 Kotlin object SomeObject { internal val standardRetroService: WebPredictionService get() = getCustomBaseRetroService(CloudUtil.doStuff) } Java SomeObject.INSTANCE.getStandardRetroServ
object SomeObject {
internal val standardRetroService: WebPredictionService
get() = getCustomBaseRetroService(CloudUtil.doStuff)
}
Java
SomeObject.INSTANCE.getStandardRetroService$app().dostuff();
由于
内部
可见性修改器,您可以获得该后缀,当从Kotlin使用属性时,该属性仅在其模块(应用程序
)内可见
Java/在字节码级别上没有这样的可见性,因此标识符会被这个后缀“弄乱”,这个后缀应该向Java客户端发出不应该使用它的信号,至少如果他们不知道自己在做什么。你可以通过打开源文件并使用工具->Kotlin->Show Kotlin bytecode->反编译,从Java的角度看
SomeObject
编译成什么。您没有添加@JvmStatic
。这是有道理的,因为代码证明有一些错误。java到kotlin的转换出错了吗:)确切地说,它在java中是从默认设置为内部的。是的,转换器似乎喜欢将一些东西(例如包可见性)转换为显式内部的。