3

我正在将我的代码库从 Java 转换为 Kotlin,我们一次转换几个类。在今天的这个过程中,我注意到一个非常奇怪的互操作问题,我希望有办法解决。

我有一个包保护的 Java 类,我将其转换为内部 Kotlin 类。这是该课程的精简版:

internal class Request private constructor(internal val method: String) {

...

}

我注意到,当我尝试从 Java 中使用这个类(在同一个包中)时,它会将构建名称和一个美元符号附加到我的 getter for method. 像这样:

request.getMethod$myproject_debug()

如果我公开方法字段,这将停止发生。我真的希望有办法解决这个问题,因为如果不是这样,切换到 Kotlin 将是一个大问题。

4

1 回答 1

5

如官方文档中所述,该行为是故意的。

internal声明变成public了Java。类的成员internal会经过名称修改,以便更难在 Java 中意外使用它们,并允许根据 Kotlin 规则重载具有相同签名但彼此看不到的成员;

您可以告诉 Jvm 您希望在 Java 中显示什么方法名称,如下所示,

internal class Request constructor(@get:JvmName("getMethod") internal val method: String)

现在,您将能够从 java 中以request.getMethod().

于 2019-07-26T13:05:00.133 回答