怎能新的原始类型JNI。我有一个返回jobject功能。它可以返回jintjchar

有是NewString,为什么不NewIntegerNewCharacterNewDouble等有一个在此刻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。

有帮助吗?

解决方案

jintjdouble等方面不jobjects。正如你所说,他们是原始变量。只需填写他们!

jint someInt = 1;
jdouble someDouble = 3.14159;

重新编辑:我明白了,你想返回的盒装的类型,如IntegerDouble,等呀,你贴的包装函数可能是要走的路。

其他提示

为什么你觉得这种做法是“开销太大”?如果要返回的装箱值(其是保持原始的,不是“基本类型”的对象),那么你需要创建该对象。

一种替代方法是调用valueOf()方法的包装类型。

不过,我觉得你最好返回实际原始值,并让它得到盒装(如果你需要的),一旦它在Java端。


如果你担心的开销函数/构造函数查找,那么你应该缓存方法ID。不同于对象指针,他们将不会改变(有一些注意事项再次,并不适用于原始包装卸载的类)。见项目10.7位置: http://java.sun.com/docs /books/jni/html/pitfalls.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top