Kotlin Обнуляемый тип JNI - PullRequest
       9

Kotlin Обнуляемый тип JNI

1 голос
/ 18 февраля 2020

Как работать с Kotlin обнуляемым типом наподобие ' Long? ', ' String? ' et c. на 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: Long? 'из JNI?

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

1 Ответ

2 голосов
/ 18 февраля 2020

Long? становится java.lang.Long на JVM, поэтому используйте

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