2 回答

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
我找到了解決方案:
JNIEXPORT void JNICALL Java_ConsoleIO_printList(JNIEnv *env, jclass cls, jobject obj)
{
jclass listClass = (*env)->GetObjectClass(env,obj);
jmethodID sizeMethod = (*env)->(env,listClass,"size","()I");
jmethodID getMethod = (*env)->GetMethodID(env,listClass,"get","(I)Ljava/lang/Object");
jint size = (*env)->CallIntMethod(env,sizeMethod);
}

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
Java 有類(lèi)型擦除。所以在編譯后的代碼中List<String>就變成List了。
因此,您真正要尋找的是使用 JNI 實(shí)現(xiàn)以下 Java 調(diào)用:
jint size = list.size();
for (jint i = 0; i < size; i++) {
jobject elem = list.get(i);
jstring str = (jstring)elem;
... print str ...
}
在上面的 C 代碼中,list.size()andlist.get()必須替換為對(duì)GetMethodID,CallIntMethod和 的調(diào)用CallObjectMethod??梢詓tr使用GetStringChars或檢索字符串GetStringUTFLength。并且需要一些內(nèi)存管理:ReleaseXXX.
添加回答
舉報(bào)