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!