以程式方式檢索 Java 中介面的類別實作
Java 反射提供了用於內省類別和介面的靈活機制。在這種情況下,開發人員可以利用反射來檢索實作特定介面的所有類別的清單。
基於反射的方法
使用反射 庫,開發人員可以輕鬆擷取介面的子類別如下所示:
Reflections reflections = new Reflections("firstdeveloper.examples.reflections"); Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
ServiceLoader方法
Java ServiceLoader 提供了另一種發現介面實作的方法。此技術需要將介面定義為服務提供者介面 (SPI) 並聲明其實作:
ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class); for (Pet implClass : loader) { System.out.println(implClass.getClass().getSimpleName()); // prints Dog, Cat }
套件級註解方法
With package -層級註解,我們可以在package-info.java中宣告介面的實作file:
@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class}) package examples.reflections;
然後,我們可以使用反射來擷取這些實作:
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()); } } }
以上是如何以程式設計方式尋找在 Java 中實作給定介面的所有類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!