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

How to convert Java Object types like Long and Integer to primitive types like long and int

我的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 原语?

提前谢谢大家。

我的实体

public class MyEntity {

    private Long _myEntityGUID;

    public Long get_myEntityGUID() {
        return _myEntityGUID;
    }

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

How can I go about converting a Java Long Object to a C primitive?

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

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