Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Cari Secara Dinamik Semua Subkelas Kelas Asas dalam Java pada Runtime?

Bagaimanakah Saya Boleh Cari Secara Dinamik Semua Subkelas Kelas Asas dalam Java pada Runtime?

Barbara Streisand
Barbara Streisandasal
2024-11-26 03:50:11147semak imbas

How Can I Dynamically Find All Subclasses of a Base Class in Java at Runtime?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn