Heim >Java >javaLernprogramm >Wie kann ich zur Laufzeit in Java alle Unterklassen einer Basisklasse finden?
Zur Laufzeit müssen Sie möglicherweise alle Klassen in Ihrer Java-Anwendung finden, die von einer bestimmten Basisklasse erben. Dies kann nützlich sein, um das dynamische Laden von Klassen zu implementieren oder Funktionen hinzuzufügen, ohne vorhandenen Code zu ändern.
In Java ist es nicht einfach, zur Laufzeit eine Liste aller verfügbaren Klassen im Klassenpfad der Anwendung abzurufen. Es gibt jedoch Bibliotheken, die diese Aufgabe erleichtern können.
Eine solche Bibliothek ist org.reflections, die Methoden zum Scannen von Paketen und Erkennen von Klassen bereitstellt. Mit org.reflections können Sie eine Reihe von Klassen erhalten, die eine bestimmte Basisklasse erweitern:
Reflections reflections = new Reflections("com.mycompany"); Set<Class<? extends MyInterface>> classes = reflections.getSubTypesOf(MyInterface.class);
Dieser Code durchsucht das Paket „com.mycompany“ rekursiv und sucht nach Klassen, die die Schnittstelle „MyInterface“ implementieren . Anschließend können Sie den resultierenden Klassensatz durchlaufen und nach Bedarf Objekte instanziieren.
Eine weitere bemerkenswerte Bibliothek für diesen Zweck ist ClassGraph. Es verwendet einen anderen Ansatz zum Erkennen von Klassen und stellt eine umfassende API zum Abfragen und Überprüfen des Klassenpfads bereit. Mit ClassGraph können Sie eine Liste von Klassen erhalten, die eine Basisklasse erweitern, indem Sie den folgenden Code verwenden:
ClassGraph classGraph = new ClassGraph(); ClassInfoList classInfos = classGraph.getSubclasses(BaseClass.class);
ClassGraph scannt den Klassenpfad gründlich, einschließlich JAR-Dateien und Klassenlader. Es bietet zusätzliche Funktionen wie das Filtern nach Annotation oder Methodenpräsenz.
Diese Bibliotheken bieten eine praktische Möglichkeit, untergeordnete Klassen zur Laufzeit dynamisch zu laden und zu instanziieren. Indem Sie die Hardcodierung einer Klassenliste vermeiden, können Sie problemlos Funktionen hinzufügen oder entfernen, ohne die Basisklasse oder den Anwendungscode zu ändern.
Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit in Java alle Unterklassen einer Basisklasse finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!