【问题标题】:Kotlin Nullable JNI TypeKotlin 可空 JNI 类型
【发布时间】:2020-02-18 18:41:35
【问题描述】:

如何在 JNI 上使用 Kotlin 可空类型,例如 'Long?'、'String?' 等强>? JNI 类型签名代表以下信息:

Signature  |Java Type
-----------|----------------
    Z      | boolean
    B      | byte
    C      | char
    S      | short
    I      | int
    J      | long
    F      | float
    D      | double
    L      | fully-qualified-class;
    [ type | type[]
    (arg-types)| ret-type method type

但是如何使用 JNI 中的可为空的 'var value:Long?'?

Kotlin 代码

class KtClass
{
    var value:Long? = null
}

JNI

jclass ktclass = env->FindClass("package/KtClass");
jmethodID ctorktID = env->GetMethodID(ktclass, "<init>", "()V");
env->NewObject(ktclass, ctorktID);

//J - mean Kotlin Long, but it not nullable 'Long?'
jfieldID valueID = env->GetFieldID(ktclass, "value", "J");
env->SetLongField(ktclass, valueID, NULL); //Error

【问题讨论】:

    标签: kotlin java-native-interface nullable


    【解决方案1】:

    Long? 在 JVM 上变成 java.lang.Long,所以使用

    env->GetFieldID(ktclass, "value", "Ljava/lang/Long;")
    

    【讨论】:

      猜你喜欢
      • 2017-06-25
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      相关资源
      最近更新 更多