kotlin - Kotlin可空JNI类型

标签 kotlin java-native-interface nullable

如何处理 Kotlin可为空的类型,例如' Long? ','字符串? 上的'等。JNI 吗?
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

但是如何使用可为空的 var值:长? '来自JNI?

Kotlin 密码
class KtClass
{
    var value:Long? = null
}

杰尼
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

最佳答案

Long?在JVM上变成java.lang.Long,因此使用

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

关于kotlin - Kotlin可空JNI类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60278610/

相关文章:

android - java.lang.NoClassDefFoundError $$inlined$forEach$lambda$1 在 Kotlin

mysql - 违反完整性约束 - Null MySQL

android - 人们安装我的应用程序时,他们会得到两个应用程序

android - 无法完成刷新条目的计划请求。客户端错误代码 : 3 Android Kotlin

java - 在访问 JNI 接口(interface)时,为什么 C 需要额外的间接级别而 C++ 不需要?

Android NDK - 链接共享库和 JNI 包装器时出错

java - 检查可选对象是否不为空且为空

java - 类型注释属于有界通配符的什么位置?

java - Kotlin val 是否提供与 java final 相同的可见性保证?

java - JNI - 从 native 线程抛出 Java 异常