#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 правильно. Дженерики используются просто для обеспечения безопасности типов. При компиляции компилятор выполняет «удаление типа». Ознакомьтесь с этим более подробным объяснением удаления типа: Удаление типа