Czy można wywołać natywną funkcję CPP za pomocą JNI, która pobiera ogólne argumenty? Coś jak następuje:Java generics i JNI
public static native <T, U, V> T foo(U u, V v);
a następnie wywołać to lubią:
//class Foo, class Bar, class Baz are already defined;
Foo f = foo(new Bar(), new Baz());
Może ktoś proszę podać mnie z próbką, która jest faktycznie robi to albo jakiś tutorial na sieci, która to robi? Pytam, ponieważ w mojej funkcji CPNI JNI (wywoływanej przez JVM) pojawia się niezadowalający błąd łącza.
Kod CPP następująco:
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);
}
EDIT:
Próbowałem, modyfikując kod, ale teraz jestem coraz NoSuchMethodError:
kodJava:
public static native <U, V> String foo(U u, V v);
//...
String str = foo(new Bar(), new Baz());
Kod 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);
}
Czy to oznacza, że JNI nie ma wsparcia dla leków generycznych lub czegoś brakuje?
JNI nie robi nic magicznego. Podobnie jak w przypadku standardowego kodu Javy, gdzie utworzysz 'T'? –