我的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;
}
}
答案 0 :(得分:2)
如何将Java长对象转换为C原语?
调用其longValue()
方法。请注意,您需要先测试对象是否为null
,否则请准备好处理NullPointerException
(就像在Java端使用自动(联合)装箱一样)。
另请注意,在可能的情况下,在Java端处理这样的事情比在JNI中处理更容易。在您提供的示例中,这似乎不可能,但也许您可以重构,以便本机方法做得更少,因此不需要整个MyEntity
作为参数。