我有返回collection<"Integer">
Java方法,我想在河用它轉換Java集合
public Collection<Integer> search(){ ....}
使用JNI,應該是什麼類型R中的這個(Java集合)對象。我嘗試了"[I"
,這意味着一個整數數組,但它沒有奏效。
我有返回collection<"Integer">
Java方法,我想在河用它轉換Java集合
public Collection<Integer> search(){ ....}
使用JNI,應該是什麼類型R中的這個(Java集合)對象。我嘗試了"[I"
,這意味着一個整數數組,但它沒有奏效。
Collection<Integer>
是通過參數化通用接口Collection
創建的類型,它允許在使用Collection<Integer>
時執行一些編譯時健全性檢查。
但是,在運行時,剩下的Collection<Integer>
只是the raw typeCollection
。因此,如果您嘗試使用FindClass
來找到合適的課程,則應查找java.util.Collection
,即"java/util/Collection"
。
一旦你對類的引用,並以該類你可以用Collection
的toArray
方法來獲取Integer
對象的普通的數組,如果這就是你想要的東西的一個實例的引用。
小半毫無意義的例子(假設你有一個jobject intColl
這是指你的Collection<Integer>
):
// Get an array of Objects corresponding to the Collection
jclass collClass = env->FindClass("java/util/Collection");
jmethodID collToArray = env->GetMethodID(collClass, "toArray", "()[Ljava/lang/Object;");
jobjectArray integerArray = (jobjectArray) env->CallObjectMethod(intColl, collToArray);
// Get the first element from the array, and then extract its value as an int
jclass integerClass = env->FindClass("java/lang/Integer");
jmethodID intValue = env->GetMethodID(integerClass, "intValue", "()I");
jobject firstInteger = (jobject) env->GetObjectArrayElement(integerArray, 0);
int i = env->CallIntMethod(firstInteger, intValue);
__android_log_print(ANDROID_LOG_VERBOSE, "Test", "The value of the first Integer is %d", i);
env->DeleteLocalRef(firstInteger);
env->DeleteLocalRef(integerArray);
您能否指定更多關於toArray的內容。我應該在哪裏使用它?在'公共集合
@HaroonRashid:我已經添加了一個代碼示例。我還修正了一個錯字(應該傳遞給'FindClass'的字符串是''java/util/Collection'',而不是''Ljava/util/Collection;'') – Michael
據我所知,當你處理與JNI代碼Java泛型你需要使用原始類型,即'Ljava/util/Collection;' – Michael
我試過[Ljava/util/Collection;但仍然沒有運氣。 –
'Ljava/util/Collection;',而不是'[Ljava/util/Collection;'。這不是一個「集合」的數組。 – Michael