-
21-09-2019 - |
题
怎能新的原始类型JNI。我有一个返回jobject
功能。它可以返回jint
,jchar
等
有是NewString
,为什么不NewInteger
,NewCharacter
,NewDouble
等有一个在此刻JNI层没有自动装箱。
我可以用NewObject
电话去,但是这将是太多的开销,以创建原始类型。
jobject NewInteger(JNIEnv* env, jint value)
{
jclass cls = FindClass(env, "java/lang/Integer");
jmethodID methodID = GetMethodID(env, cls, "<init>", "(I)V", false);
return env->NewObject(cls, methodID, value);
}
我有包装函数来获得类和放在methodID。
解决方案
jint
,jdouble
等方面不jobjects
。正如你所说,他们是原始变量。只需填写他们!
jint someInt = 1;
jdouble someDouble = 3.14159;
重新编辑:我明白了,你想返回的盒装的类型,如Integer
,Double
,等呀,你贴的包装函数可能是要走的路。
其他提示
为什么你觉得这种做法是“开销太大”?如果要返回的装箱值(其是保持原始的,不是“基本类型”的对象),那么你需要创建该对象。
一种替代方法是调用valueOf()
方法的包装类型。
不过,我觉得你最好返回实际原始值,并让它得到盒装(如果你需要的),一旦它在Java端。
如果你担心的开销函数/构造函数查找,那么你应该缓存方法ID。不同于对象指针,他们将不会改变(有一些注意事项再次,并不适用于原始包装卸载的类)。见项目10.7位置: http://java.sun.com/docs /books/jni/html/pitfalls.html
不隶属于 StackOverflow