我們如何在JNI中新建基元類型。我有一個返回jobject
的函數。它可能返回jint
,jchar
等JNI新的基元類型
有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);
}
我有包裝函數來獲取Class和MethodID。
@Firat - 如果你已經開始擔心這種事情,這表示你的應用程序有太多的JNI *。 – 2010-03-22 22:46:29
我們的Java API使用C代碼。一切都依賴於JNI調用的性能。這就是爲什麼我儘可能快地做出這一部分的原因。 – Firat 2010-03-23 00:01:06