我正在将部分应用程序从 Java 迁移到 Kotlin 并对此有疑问。
什么是更可取或更好的方法?
@file:JvmName("ClassX")
fun funX() {}
Run Code Online (Sandbox Code Playgroud)
或者
class ClassX {
companion object {
@JvmStatic
fun funX() {}
}
}
Run Code Online (Sandbox Code Playgroud)
让我们看看反编译的代码来回答这个问题。
带有@JvmName像您这样的注释的Kotlin 文件:
@file:JvmName("ClassX")
fun funX() {}
Run Code Online (Sandbox Code Playgroud)
将被编译成字节码,类似于这个 Java 代码:
@file:JvmName("ClassX")
fun funX() {}
Run Code Online (Sandbox Code Playgroud)
与您在使用 Java 时可能编写的内容非常相似,对吗?
一个 Kotlin 类,有一个像这样的伴生对象:
class ClassX {
companion object {
@JvmStatic
fun funX() {}
}
}
Run Code Online (Sandbox Code Playgroud)
类似于此 Java 代码:
@JvmName(
name = "ClassX"
)
public final class ClassX {
public static final void funX() {
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,带有伴生对象的类将生成更多代码。
是好还是坏?你决定。我会说这很糟糕,最好使用带@JvmName注释的文件。Kotlin 的论坛上也有关于这个话题的讨论:阅读最佳实践。
顺便说一句,您可以通过“工具”->“Kotlin”->“显示 Kotlin 字节码”查看 IntelliJ IDEA 中的字节码和反编译的 Java 代码。
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |