Semasa runtime, anda mungkin perlu mencari semua kelas dalam aplikasi Java anda yang mewarisi daripada kelas asas tertentu. Ini boleh berguna untuk melaksanakan pemuatan kelas dinamik atau menambah kefungsian tanpa mengubah suai kod sedia ada.
Dalam Java, adalah tidak mudah untuk mendapatkan senarai semua kelas yang tersedia dalam laluan kelas aplikasi pada masa jalan. Walau bagaimanapun, terdapat perpustakaan yang boleh memudahkan tugas ini.
Salah satu perpustakaan tersebut ialah org.reflections, yang menyediakan kaedah untuk mengimbas pakej dan menemui kelas. Menggunakan org.reflections, anda boleh mendapatkan set kelas yang melanjutkan kelas asas tertentu:
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
Kod ini mengimbas pakej "com.mycompany" secara rekursif, mencari kelas yang melaksanakan antara muka "MyInterface" . Anda kemudiannya boleh mengulangi set kelas yang terhasil dan membuat instantiate objek seperti yang diperlukan.
Satu lagi perpustakaan terkenal untuk tujuan ini ialah ClassGraph. Ia menggunakan pendekatan yang berbeza untuk menemui kelas, menyediakan API yang komprehensif untuk membuat pertanyaan dan memeriksa laluan kelas. Dengan ClassGraph, anda boleh mendapatkan senarai kelas yang melanjutkan kelas asas menggunakan kod berikut:
ClassGraph classGraph = new ClassGraph(); ClassInfoList classInfos = classGraph.getSubclasses(BaseClass.class);
ClassGraph mengimbas laluan kelas dengan teliti, termasuk fail jar dan pemuat kelas. Ia menawarkan ciri tambahan seperti menapis mengikut anotasi atau kehadiran kaedah.
Perpustakaan ini menyediakan cara yang mudah untuk memuatkan dan membuat instantiat kelas kanak-kanak secara dinamik pada masa jalan. Dengan mengelakkan pengekodan keras senarai kelas, anda boleh menambah atau mengalih keluar fungsi dengan mudah tanpa mengubah kelas asas atau kod aplikasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas Asas pada Runtime di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!