在 Java 中以程式設計方式查詢介面實作
檢索實作介面的類別清單可能具有挑戰性。幸運的是,Java 提供了多種方法來解決此查詢:
使用Reflections 庫:
Reflections 是一個流行的庫,允許開發人員檢查和操作有關類別和類別的元資料包。使用Reflections,您可以獲得實作給定介面的子類別清單:
Reflections reflections = new Reflections("my.package"); Set<Class<? extends Pet>> classes = reflections.getSubTypesOf(Pet.class);
利用ServiceLoader:
ServiceLoader 提供了一種獨立於平台的機制來發現相容的實作服務提供者介面。這種方法需要將您的介面定義為服務提供者介面並聲明其實作。設定此基礎設施後,您可以獲得以下實現:
ServiceLoader<Pet> loader = ServiceLoader.load(Pet.class); for (Pet implClass : loader) { System.out.println(implClass.getClass().getSimpleName()); }
使用包級註釋:
包級註釋提供了一種註釋方法帶有元數據的包。可以利用此功能來標記套件及其包含的類別的資訊。要利用此方法:
定義自訂註解來識別實作類別:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PACKAGE) public @interface MyPackageAnnotation { Class<?>[] implementationsOfPet() default {}; }
將註解套用到原始程式碼:
@MyPackageAnnotation(implementationsOfPet = {Dog.class, Cat.class}) package my.package;
查詢已實作類別:
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()); } }
這些技術提供了取得指定介面的類別清單的彈性。
以上是如何以程式設計方式尋找在 Java 中實作特定介面的類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!