如何将像Long和Integer这样的Java对象类型转换为long和int等基本类型

时间:2018-05-16 04:15:36

标签: java android object java-native-interface primitive-types

我的Java方法签名如下:

public native Long passLong(MyEntity myEntity);  

然后映射:

extern "C"
JNIEXPORT jobject JNICALL
Java_passLong(JNIEnv *env, jobject instance, jobject myEntity) {

    jclass myEntityClazz = env->GetObjectClass(myEntity);
    jmethodID get_myEntityGUID = env->GetMethodID(myEntityClazz, "get_myEntityGUID", "()Ljava/lang/Long;");
    jobject myEntityGUID = env->CallObjectMethod(myEntity, get_myEntityGUID);

    // Convert the Long object to a primitive here

    return myEntityGUID;

}  

如何将Java长对象转换为C原语?

提前谢谢大家。

MyEntity

public class MyEntity {

    private Long _myEntityGUID;

    public Long get_myEntityGUID() {
        return _myEntityGUID;
    }

    public void set_myEntityGUID(Long _myEntityGUID) {
        this._myEntityGUID = _myEntityGUID;
    }
}

1 个答案:

答案 0 :(得分:2)

  

如何将Java长对象转换为C原语?

调用其longValue()方法。请注意,您需要先测试对象是否为null,否则请准备好处理NullPointerException(就像在Java端使用自动(联合)装箱一样)。

另请注意,在可能的情况下,在Java端处理这样的事情比在JNI中处理更容易。在您提供的示例中,这似乎不可能,但也许您可以重构,以便本机方法做得更少,因此不需要整个MyEntity作为参数。