Mengenalpasti Subkelas Secara Dinamik dalam Aplikasi Java
Aturcara Java menggunakan fail .class yang digabungkan secara longgar. Ini menjadikannya mencabar untuk mengenal pasti secara dinamik semua subkelas yang memanjangkan kelas asas semasa runtime. Walau bagaimanapun, terdapat mekanisme yang tersedia untuk mengurangkan pengehadan ini.
Perpustakaan org.reflections
Pustaka org.reflections menawarkan penyelesaian yang berkuasa untuk menemui subkelas pada masa jalan. Ia menggunakan anotasi dan refleksi untuk introspeksi kelas dan hubungannya. Coretan kod berikut menunjukkan penggunaannya:
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
di mana "com.mycompany" ialah pakej untuk mengimbas kelas. Kod ini menangkap semua subjenis MyInterface dalam pakej yang ditentukan.
Contoh Penggunaan
Sebagai contoh, pertimbangkan kod berikut:
public static void main(String[] args) throws IllegalAccessException, InstantiationException { Reflections reflections = new Reflections("java.util"); Set<Class<? extends List>> classes = reflections.getSubTypesOf(java.util.List.class); for (Class<? extends List> aClass : classes) { System.out.println(aClass.getName()); if(aClass == ArrayList.class) { List list = aClass.newInstance(); list.add("test"); System.out.println(list.getClass().getName() + ": " + list.size()); } } }
Ini kod berulang melalui semua subjenis Senarai dalam pakej java.util. Secara khusus, ia mengenal pasti ArrayList dan menunjukkan keupayaan untuk mencipta contoh dengan refleksi. Output akan termasuk yang berikut:
java.util.LinkedList java.util.AbstractSequentialList java.util.Vector java.util.ArrayList: 1
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Secara Dinamik Semua Subkelas Kelas Asas dalam Java pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!