首頁 >Java >java教程 >如何以程式設計方式尋找在 Java 中實作給定介面的所有類別?

如何以程式設計方式尋找在 Java 中實作給定介面的所有類別?

DDD
DDD原創
2024-12-05 01:45:11456瀏覽

How Can I Programmatically Find All Classes Implementing a Given Interface in Java?

以程式方式檢索 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn