如何将 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
作为参数。
我的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
作为参数。