Kotlin utilise-t-il la même implémentation d'interface native que Java sous le capot? Est-il aussi efficace (ou inefficace) qu'en Java (coût du transfert d'objets, flux d'octets, etc.)?Interface native Kotlin
2
A
Répondre
2
Sous le capot, l'implémentation est la même, car elle sera convertie au même code Java. Cela signifie qu'il est efficace comme votre code Java.
Compte tenu de cette classe Kotlin avec la méthode native nativeMethod()
:
class ExampleJni {
companion object {
init {
System.loadLibrary("example-jni")
}
}
external fun nativeMethod(): String
}
Il utilisera le « même » la mise en œuvre de cette classe Java (la conversion est pas exactement le même, mais il ne sera pas un impact sur la implémentation native):
public class ExampleJni {
static {
System.loadLibrary("hello-jni");
}
public final native String nativeMethod();
}
EDIT
Pour être plus clair au sujet de la conversion. Si vous décompilez le code Kotlin, vous pouvez voir qu'il est converti en deux classes. La première est une contenant les méthodes natives:
@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() { ... }
}
L'autre est la classe interne liée à la companion object
.
@dalvik.annotation.EnclosingClass
@dalvik.annotation.InnerClass
@kotlin.Metadata
public final class ExampleJni$Companion {
private ExampleJni$Companion() { ... }
public ExampleJni$Companion(DefaultConstructorMarker) { ... }
}