use*_*853 3 kotlin kotlin-java-interop
我正在将我的代码库从 Java 转换为 Kotlin,并且我们一次转换几个类。在今天的这个过程中,我注意到一个非常奇怪的互操作问题,我希望有办法解决。
我有一个受包保护的 Java 类,我将其转换为内部 Kotlin 类。这是该课程的删节版本:
internal class Request private constructor(internal val method: String) {
...
}
Run Code Online (Sandbox Code Playgroud)
我注意到,当我尝试使用 Java 中的此类(在同一包中)时,它会将构建名称和美元符号附加到我的 getter 的末尾method。像这样:
request.getMethod$myproject_debug()
如果我将方法字段公开,这种情况就会停止发生。我真的希望有办法解决这个问题,因为如果没有办法的话,转向 Kotlin 将是一个大问题。
正如官方文档中提到的,这种行为是故意的。
internal声明变成public了Java。类的成员internal会经过名称修改,以便更难从 Java 中意外使用它们,并允许根据 Kotlin 规则重载具有相同签名但彼此看不到的成员;
您可以告诉 Jvm 您希望在 Java 中显示什么方法名称,如下所示,
internal class Request constructor(@get:JvmName("getMethod") internal val method: String)
Run Code Online (Sandbox Code Playgroud)
现在,您将能够从 java as 访问它request.getMethod()。
| 归档时间: |
|
| 查看次数: |
591 次 |
| 最近记录: |