動態辨識 Java 應用程式中的子類別
Java 程式利用鬆散聯合的 .class 檔案。這使得在運行時動態識別擴展基類的所有子類變得具有挑戰性。但是,有一種機制可以緩解此限制。
org.reflections 庫
org.reflections 庫為在運行時發現子類提供了強大的解決方案。它利用註解和反射來內省類及其關係。以下程式碼片段示範了其用法:
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
其中「com.mycompany」是用於掃描類別的套件。此程式碼會擷取指定套件中 MyInterface 的所有子類型。
範例用法
例如,請考慮以下程式碼:
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()); } } }
此程式碼迭代 java.util 套件中 List 的所有子類型。具體來說,它標識了 ArrayList 並演示了透過反射來創建實例的能力。輸出將包括以下內容:
java.util.LinkedList java.util.AbstractSequentialList java.util.Vector java.util.ArrayList: 1
以上是Java中如何在運行時動態查找基類的所有子類?的詳細內容。更多資訊請關注PHP中文網其他相關文章!