首頁 >Java >java教程 >在 Java 中如何在運行時發現給定類別的所有子類別?

在 Java 中如何在運行時發現給定類別的所有子類別?

Barbara Streisand
Barbara Streisand原創
2024-11-26 05:16:10531瀏覽

How Can I Discover All Subclasses of a Given Class at Runtime in Java?

Java 中基於反射的類別發現

在Java 應用程式中,在執行時確定擴充基底類別的所有類別會帶來挑戰,因為.class 檔案擴散的本質。本文探討了克服此限制的各種方法。

使用 Java 反射和第三方函式庫

透過反射,可以遍歷應用程式的類別路徑來定位類別。像 org.reflections 這樣的函式庫為這項任務提供了方便的方法。例如:

Reflections reflections = new Reflections("com.mycompany");    
Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);

此程式碼會擷取指定套件中擴充 MyInterface 的所有類別。

範例應用程式

考慮一個需要以下功能的應用程式:建立擴充 Animal 的所有類別的物件。使用上述技術,我們可以實現這一點:

public static void main(String[] args) throws IllegalAccessException, InstantiationException {
    Reflections reflections = new Reflections("java.util");
    Set<Class<? extends List>> classes = reflections.getSubTypesOf(java.util.List.class);
    for (Class<? extends List> aClass : classes) {
        System.out.println(aClass.getName());
        if (aClass == ArrayList.class) {
            List list = aClass.newInstance();
            list.add("test");
            System.out.println(list.getClass().getName() + ": " + list.size());
        }
    }
}

此程式碼將列印所有 List 實作的名稱並建立 ArrayList 的實例來驗證其功能。

結論

雖然Java 由於其基於類的結構而存在固有的挑戰,但使用反射和庫(例如org.reflections 提供了運行時類發現的實用方法,使開發人員能夠擴展功能並根據繼承關係動態建立類別的實例。

以上是在 Java 中如何在運行時發現給定類別的所有子類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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