我在玩Kotlin
,并以不同的方式创建Util类。我正在寻找一种最适合Kotlin或Java调用的方法。
现在,我创建了许多类型的Util。现在我很困惑,哪个最好用,为什么最重要?我正在寻找考虑堆,内存,性能的最佳方法。
我的问题对你们来说可能看起来很愚蠢,但我迷宫般,无法亲自解决。
这是我的游乐场。
我创建了5个Kotlin文件。我在其中放了foo()方法。并尝试通过Kotlin和Java致电。
调用类Bar.kt
class Bar {
fun bazz() {
UtilClass.instance.foo()
UtilClassObject.UtilClassObject.foo()
UtilCompanionObject.foo()
UtilFileObject.foo()
foo() // from UtilFile
}
}
Run Code Online (Sandbox Code Playgroud)
调用类Qux.java
public class Qux {
public void bazz() {
UtilClass.Companion.getInstance().foo();
UtilClassObject.UtilClassObject.INSTANCE.foo();
UtilFileKt.foo();
UtilFileObject.INSTANCE.foo();
UtilCompanionObject.Companion.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
这里是迷宫,这让我感到困惑,选择最好的。
UtilClass.kt
class UtilClass {
fun foo() { ... }
companion object {
val instance = UtilClass()
}
}
Run Code Online (Sandbox Code Playgroud)
UtilClassObject.kt
class UtilClassObject {
object UtilClassObject {
fun foo() { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
UtilCompanionObject.kt
class UtilCompanionObject {
companion object {
fun foo() { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
UtilFile.kt
fun foo(){ ... }
Run Code Online (Sandbox Code Playgroud)
UtilFileObject.kt
object UtilFileObject {
fun foo() { ... }
}
Run Code Online (Sandbox Code Playgroud)
可能需要回答我的问题并很好地解释它。因此,我非常感谢您提前做出的努力。
所有选项都在Kotlin参考页面上提供,用于Kotlin和Java之间的互操作:https : //kotlinlang.org/docs/reference/java-to-kotlin-interop.html
您可以选择从Java上MyUtil
调用类中的东西,然后不使用诸如此类的实例来调用它,MyUtil.foo()
您只需执行以下两个选项之一:
// smallest byte code,
// static invocation of foo() from Kotlin side,
// also static call from Java to foo()
object MyUtil {
@JvmStatic fun foo() { ... }
}
Run Code Online (Sandbox Code Playgroud)
要么
// creates two classes,
// static lookup of companion followed by virtual call on that instance to foo() from Kotlin,
// Java is a static call to foo()
class MyUtil {
companion object {
@JvmStatic fun foo() { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
在Kotlin中,您也可以这样称呼MyUtil.foo()
。具体来说,这是使Kotlin方法静态化的模型。
从Java来看,这两个示例都是相同的,因为它们只是对静态方法的直接静态调用。在Kotlin中,第一个示例也是静态调用,第二个示例首先查找同伴的实例,然后对该方法进行虚拟调用。第二个示例创建两个类,另一个示例仅创建一个类。
您提供的其他选项效率不高,语法也较难看。根据最小的字节码,最少的类和最快的性能,选择第一个示例,即仅1类和所有静态调用。
归档时间: |
|
查看次数: |
1883 次 |
最近记录: |