2
Kotlin是否使用与Java下相同的原生界面实现? 它是否像Java一样高效(或无效)(对象传输成本,字节流等)?Kotlin本机界面
Kotlin是否使用与Java下相同的原生界面实现? 它是否像Java一样高效(或无效)(对象传输成本,字节流等)?Kotlin本机界面
在底层,实现是相同的,因为它将被转换为相同的Java代码。这意味着它与Java代码一样高效。
鉴于这种科特林类的本地方法nativeMethod()
:
class ExampleJni {
companion object {
init {
System.loadLibrary("example-jni")
}
}
external fun nativeMethod(): String
}
它将使用Java类的“相同”的实施(转换是不完全一样,但它不会影响本机实现):
public class ExampleJni {
static {
System.loadLibrary("hello-jni");
}
public final native String nativeMethod();
}
编辑
约为转换更加清晰。如果您反编译Kotlin代码,则可以看到它已转换为两个类。 第一个是包含本机方法:
@dalvik.annotation.MemberClasses
@kotlin.Metadata
public final class ExampleJni {
public static final ExampleJni$Companion Companion;
public ExampleJni() { ... }
static void <clinit>() { ... }
@org.jetbrains.annotations.NotNull
// Here you can see that the implementation is the same.
public final native String nativeMethod() { ... }
}
另一种是涉及到companion object
内部类。
@dalvik.annotation.EnclosingClass
@dalvik.annotation.InnerClass
@kotlin.Metadata
public final class ExampleJni$Companion {
private ExampleJni$Companion() { ... }
public ExampleJni$Companion(DefaultConstructorMarker) { ... }
}