2017-10-09 76 views
2

Kotlin是否使用与Java下相同的原生界面实现? 它是否像Java一样高效(或无效)(对象传输成本,字节流等)?Kotlin本机界面

回答

2

在底层,实现是相同的,因为它将被转换为相同的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) { ... } 
}