Menyiasat Pelaksanaan Antara Muka Secara Pengaturcaraan dalam Java
Mendapatkan semula senarai kelas yang melaksanakan antara muka boleh terbukti mencabar. Nasib baik, Java menawarkan beberapa pendekatan untuk menangani pertanyaan ini:
Menggunakan Pustaka Reflections:
Reflections ialah perpustakaan popular yang membolehkan pembangun memeriksa dan memanipulasi metadata tentang kelas dan pakej. Menggunakan Reflections, anda boleh mendapatkan senarai subkelas yang melaksanakan antara muka yang diberikan:
Reflections reflections = new Reflections("my.package"); Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
Memanfaatkan ServiceLoader:
ServiceLoader menyediakan mekanisme bebas platform untuk menemui pelaksanaan yang serasi antara muka pembekal perkhidmatan. Pendekatan ini memerlukan penentuan antara muka anda sebagai antara muka pembekal perkhidmatan dan mengisytiharkan pelaksanaannya. Selepas menyediakan infrastruktur ini, anda boleh mendapatkan pelaksanaan seperti berikut:
ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class); for (Pet implClass : loader) { System.out.println(implClass.getClass().getSimpleName()); }
Menggunakan Anotasi Peringkat Pakej:
Anotasi peringkat pakej menyediakan cara untuk membuat anotasi pakej dengan metadata. Ciri ini boleh dieksploitasi untuk menandakan pakej dengan maklumat tentang kelas yang terkandung di dalamnya. Untuk menggunakan pendekatan ini:
Tentukan anotasi tersuai untuk mengenal pasti kelas pelaksana:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PACKAGE) public @interface MyPackageAnnotation { Class<?>[] implementationsOfPet() default {}; }
Gunakan anotasi pada pakej yang sesuai dalam kod sumber:
@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class}) package my.package;
Pertanyaan dilaksanakan kelas:
Package[] packages = Package.getPackages(); for (Package p : packages) { MyPackageAnnotation annotation = p.getAnnotation(MyPackageAnnotation.class); if (annotation != null) { Class<?>[] implementations = annotation.implementationsOfPet(); System.out.println("Found implementation: " + implementations[0].getSimpleName()); } }
Teknik ini menawarkan fleksibiliti dalam mendapatkan senarai kelas yang melaksanakan antara muka yang ditentukan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Kelas Secara Pengaturcaraan yang Melaksanakan Antara Muka Khusus dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!