Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mendapatkan Senarai Lengkap Pelaksanaan Antara Muka secara Pemrograman di Java?

Bagaimanakah Saya Boleh Mendapatkan Senarai Lengkap Pelaksanaan Antara Muka secara Pemrograman di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 07:17:12900semak imbas

How Can I Programmatically Get a Complete List of Interface Implementations in Java?

Mendapatkan Senarai Komprehensif Pelaksanaan Antara Muka melalui Pengaturcaraan dalam Java

Di Java, anda mungkin sering menghadapi keperluan untuk mendapatkan semula koleksi kelas yang melaksanakan antara muka tertentu. Ini boleh dicapai melalui pelbagai pendekatan, sebahagian daripadanya melibatkan penggunaan refleksi atau teknik khusus lain.

Menggunakan Perpustakaan Refleksi: Refleksi

Perpustakaan Reflections menyediakan cara yang mudah untuk memeriksa metadata dan perhubungan kelas. Dengan menggunakan contoh Reflections, anda boleh mendapatkan satu set kelas yang memanjangkan antara muka yang diingini, seperti yang ditunjukkan dalam contoh berikut:

Reflections reflections = new Reflections("firstdeveloper.examples.reflections");
Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);

Menggunakan ServiceLoader

ServiceLoader menawarkan mekanisme untuk mencari dan memuatkan pelaksanaan pembekal perkhidmatan pada masa jalan. Untuk memanfaatkan teknik ini untuk mendapatkan semula pelaksanaan antara muka, anda mentakrifkan ServiceProviderInterface (SPI) dan mengisytiharkan pelaksanaannya. Kod berikut menggambarkan pendekatan:

ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class);
for (Pet implClass : loader) {
    System.out.println(implClass.getClass().getSimpleName()); // prints Dog, Cat
}

Memanfaatkan Anotasi Tahap Pakej

Alternatif lain melibatkan penggunaan anotasi peringkat pakej. Pendekatan ini memerlukan penciptaan anotasi tersuai yang menentukan pelaksanaan antara muka. Contoh kod berikut menunjukkan cara untuk mentakrifkan anotasi:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PACKAGE)
public @interface MyPackageAnnotation {
    Class<?>[] implementationsOfPet() default {};
}

Untuk mengisytiharkan anotasi dalam pakej, cipta fail bernama package-info.java dan sertakan kandungan berikut:

@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class})
package examples.reflections;

Kemudian, anda boleh mendapatkan semula pelaksanaan antara muka menggunakan kod berikut:

Package[] packages = Package.getPackages();
for (Package p : packages) {
    MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class);
    if (annotation != null) {
        Class<?>[] implementations = annotation.implementationsOfPet();
        for (Class<?> impl : implementations) {
            System.out.println(impl.getSimpleName());
        }
    }
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Senarai Lengkap Pelaksanaan Antara Muka secara Pemrograman di Java?. 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