Mendapatkan semula Jenis Parameter Generik melalui Refleksi Java
Dalam Java, pembangun mungkin menghadapi keperluan untuk mendapatkan jenis parameter generik khusus pada masa jalan . Soalan ini meneroka cara untuk mencapai tugas biasa ini menggunakan pantulan Java.
Soalan:
Adakah mungkin untuk mendapatkan semula jenis parameter generik tertentu menggunakan pantulan Java?
Senario:
Pertimbangkan kod berikut coretan:
public final class Voodoo { public static void chill(List<?> aListWithTypeSpiderMan) { // Here I'd like to get the Class-Object 'SpiderMan' Class typeOfTheList = ???; } public static void main(String... args) { chill(new ArrayList<SpiderMan>()); } }
Jawapan:
Ya, mendapatkan jenis parameter generik dengan pantulan adalah mungkin. Satu pendekatan melibatkan penggunaan kod berikut:
Class<T> persistentClass = (Class<T>) ((ParameterizedType)getClass().getGenericSuperclass()) .getActualTypeArguments()[0];
Dalam kod ini, persistentClass akan mewakili hujah jenis sebenar jenis generik, dalam kes ini, SpiderMan. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa mekanisme refleksi yang mendasari boleh menjadi rumit, jadi pemahaman yang menyeluruh tentang generik Java dan refleksi disyorkan untuk pelaksanaan yang berjaya.
Atas ialah kandungan terperinci Bolehkah Java Reflection Mendapatkan Jenis Parameter Generik pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!