是否可以使用JNI調用本地CPP函數,該函數使用泛型參數?像下面這樣:Java泛型和JNI
public static native <T, U, V> T foo(U u, V v);
,然後調用它像:
//class Foo, class Bar, class Baz are already defined;
Foo f = foo(new Bar(), new Baz());
誰能請我提供這實際上是這樣做或在其上做這個網的一些教程的樣本?我在問,因爲在我的CPP JNI函數(由JVM調用)中,我得到了不滿意的鏈接錯誤。
CPP代碼如下:
JNIEXPORT jobject JNICALL Java_Processor_process (JNIEnv *env, jclass processor_class, jobject obj1, jobject obj2)
{
jclass bar_class = env->FindClass("Bar");
jmethodID getFooMethod = env->GetMethodID(bar_class, "getFoo", "()Ljava/lang/Object;");
//getFoo() is defined as `public Foo getFoo();` in Bar.java
return env->CallObjectMethod(obj1, getFooMethod);
}
編輯:
我已經通過修改代碼嘗試,但現在我得到的NoSuchMethodError:
Java代碼:
public static native <U, V> String foo(U u, V v);
//...
String str = foo(new Bar(), new Baz());
CPP代碼:
JNIEXPORT jstring JNICALL Java_Processor_process (JNIEnv *env, jclass processor_class, jobject obj1, jobject obj2)
{
jclass bar_class = env->FindClass("Bar");
jmethodID getFooMethod = env->GetMethodID(bar_class, "getFoo", "()Ljava/lang/String;");
//getFoo() is now defined as `public String getFoo();` in Bar.java
return env->CallObjectMethod(obj1, getFooMethod);
}
這是否意味着JNI不支持泛型,或者我錯過了什麼?
JNI不會做任何魔術。與bog標準Java代碼一樣,您將在哪裏創建一個「T」? – 2010-02-09 10:24:16