Как я могу создать экземпляр Java generic с помощью JNI?

#java #generics #java-native-interface

#java #дженерики #java-native-interface

Вопрос:

Если я хочу создать экземпляр Date , я могу использовать:

 jclass cls = (*env)->FindClass(env, "java/util/Date");
jmethodID ctr = (*env)->GetMethodID(env, cls, "<init>", "()V");
jobject obj = (*env)->NewObject(env, cls, ctr);
  

Но как мне создать экземпляр ArrayList<String> ?

Ответ №1:

Таким же образом. На уровне виртуальной машины нет дженериков.

Комментарии:

1. Это не очень полезно для того, как на самом деле это сделать, потому что вы можете! Просто дженерики удалены. env->GetMethodID(env->FindClass("java/util/ArrayList"), "add", "(Ljava/lang/Object;)Z");

Ответ №2:

@noise правильно. Дженерики используются просто для обеспечения безопасности типов. При компиляции компилятор выполняет «удаление типа». Ознакомьтесь с этим более подробным объяснением удаления типа: Удаление типа