Unterklassen in Java-Anwendungen dynamisch identifizieren
Java-Programme verwenden .class-Dateien, die lose zusammengeschlossen sind. Dies macht es schwierig, alle Unterklassen, die eine Basisklasse erweitern, zur Laufzeit dynamisch zu identifizieren. Es gibt jedoch einen Mechanismus, um diese Einschränkung zu mildern.
org.reflections-Bibliothek
Die org.reflections-Bibliothek bietet eine leistungsstarke Lösung zum Erkennen von Unterklassen zur Laufzeit. Es nutzt Anmerkungen und Reflexion, um Klassen und ihre Beziehungen zu untersuchen. Der folgende Codeausschnitt demonstriert seine Verwendung:
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
wobei „com.mycompany“ das Paket ist, das nach Klassen durchsucht werden soll. Dieser Code erfasst alle Untertypen von MyInterface innerhalb des angegebenen Pakets.
Beispielverwendung
Betrachten Sie beispielsweise den folgenden Code:
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()); } } }
Dies Der Code durchläuft alle Subtypen von List im Paket java.util. Insbesondere identifiziert es ArrayList und demonstriert die Fähigkeit, eine Instanz mit Reflektion zu erstellen. Die Ausgabe enthält Folgendes:
java.util.LinkedList java.util.AbstractSequentialList java.util.Vector java.util.ArrayList: 1
Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit alle Unterklassen einer Basisklasse in Java dynamisch finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!