Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么从java调用kotlin对象时会得到一个奇怪的方法名?_Java_Android_Kotlin - Fatal编程技术网

为什么从java调用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

在kotlin中,我有一个被转换为对象的类,现在当我从java调用它时,方法名被附加$app。这是什么意思

Kotlin

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中是从默认设置为内部的。是的,转换器似乎喜欢将一些东西(例如包可见性)转换为显式
内部的