gpt4 book ai didi

java - 如何在 java 中调用用 kotlin 类编写的函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:30 25 4
gpt4 key购买 nike

我在我的代码库中同时使用了 Kotlin 和 java。但我想知道是否有一种方法可以从 java 中引用 kotlin 函数?这是我的 Kotlin 代码:我的事件.kt

open class MyEvent {
@Inject
lateinit var myService: MyService

@Inject
lateinit var app: MyApp

var name: String = ""
var options: MutableMap<String, String> = hashMapOf()
var metrics: MutableMap<String, Double> = hashMapOf()

init {
app.component.inject(this)
}

fun identify() {
myService.identify()
}

}

现在,在我的基础应用程序类调用“MyApplication”中,我想调用识别函数。 (我知道在 kotlin 中我们可以通过 MyEvent().identify 做到这一点)但想知道我们如何在 java 中实现它?有什么线索吗?

提前致谢!

最佳答案

这在 Java 中完全相同。请记住,他们共享相同的底层字节码

final MyEvent myEvent = new MyEvent();
myEvent.identify();

查看为 Kotlin MyEvent 类生成的字节码(反编译)

public class my/package/MyEvent {
...

public final identify()V
L0
LINENUMBER 14 L0
RETURN // Omitted myService.identify()
...

companion 对象被转换为 Java 中的 static 类属性。
例如,对于这段 Kotlin 代码

open class MyEvent {
companion object {
fun test() = ""
}
...
}

这是生成的字节码

static <clinit>()V
NEW my/package/MyEvent$Companion
DUP
ACONST_NULL
INVOKESPECIAL my/package/MyEvent$Companion.<init> (Lkotlin/jvm/internal/DefaultConstructorMarker;)V
PUTSTATIC my/package/MyEvent.Companion : Lmy/package/MyEvent$Companion;
RETURN
MAXSTACK = 3
MAXLOCALS = 0
}

这意味着,基本上

public class MyEvent {
public static final Companion Companion = new Companion(...);
...
}

因此,在 Java 中,您可以使用

MyEvent.Companion.test();

为了

open class MyEvent {
object Factory {
fun test() = ""
}
...
}

在 Java 中会是

MyEvent.Factory.INSTANCE.test();

毕竟Java没有伴生对象的概念。
相反,使用了 static 属性和方法。

关于java - 如何在 java 中调用用 kotlin 类编写的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55283522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com