Ich implementiere eine Schnittstelle und jetzt möchte ich alle Implementierungen dieser Schnittstelle in Classpath bekommen. Ist das möglich oder soll ich etwas anderes machen?Wie kann ich alle Implementierungen der Schnittstelle im Klassenpfad finden?
Antwort
Am besten wird dies teuer sein. Im schlimmsten Fall (abhängig von den Klassenfahrern) ist es unmöglich.
Ich schlage vor, dass Sie nach einem alternativen Ansatz für das zugrunde liegende Problem suchen, das Sie versuchen, zu adressieren.
Die Reflections Bibliothek können Sie tun, dass (in einem Umfang):
Set<Class<? extends SomeClassOrInterface>> subTypes =
reflections.getSubTypesOf(SomeClassOrInterface.class);
Allerdings würde ich nicht empfehlen. Stellen Sie sich einen typischen Klassenpfad mit 50 externen Gläsern vor, von denen jedes ein großer Rahmen ist, wie Frühling, Winterschlaf, Aspektj, JSF usw. Es würde viel Zeit brauchen.
Wenn Sie irgendeine Art von Plugin-Mechanismus haben wollen, so dass andere Ihre Schnittstellen und Versorgungs Gläser mit der Umsetzung implementieren, dann schauen java.util.ServiceLoader
Nifty ........ .. –
+1 Ich wusste nie, 'java.util.ServiceLoader' existiert - sehr praktisch. –
Danke für die Antwort! Obwohl Sie es nicht empfehlen, habe ich einen Anwendungsfall, der für diese Lösung geeignet scheint, und ich kann die Abfrage asynchron ausführen, ohne die Ausführung der Anwendung stark zu beeinträchtigen. Dann stelle ich die Ergebnisse erst zur Verfügung, wenn sie fertig sind. –
- 1. Wie installiert man automatisch alle Implementierungen einer Schnittstelle mit guice?
- 2. Autofac mit mehreren Implementierungen der gleichen Schnittstelle
- 3. Wie finde ich alle Implementierungen der Schnittstelle in Classpath in groovy Projekt?
- 4. Logback kann logback.xml nicht finden, obwohl es existiert (im Klassenpfad)
- 5. Wie kann ich das Vorhandensein einer Eigenschaftendatei im Klassenpfad verspotten?
- 6. Holen Sie sich alle registrierten Implementierungen einer Schnittstelle in Autofac
- 7. Kann ich mit StructureMap alle Implementierungen einer generischen Schnittstelle für einen bestimmten Typparameter zurückgeben
- 8. Wie kann eine untergeordnete Schnittstelle die Implementierungen ihrer Eltern wiederverwenden?
- 9. Mehrere Implementierungen für eine Schnittstelle mit DI
- 10. Wie kann ich ein Jacl-Paket aus dem Klassenpfad bereitstellen?
- 11. Logback-Variablenersetzung konnte Eigenschaftendatei im Klassenpfad nicht finden
- 12. Warum kann der Java-Klassenlader meine Schnittstelle nicht finden?
- 13. Verwendung der gleichen Testsuite auf verschiedenen Implementierungen einer Repository-Schnittstelle
- 14. Datei im Klassenpfad lesen
- 15. Mehrere Implementierungen mit einer einzigen Schnittstelle registrieren
- 16. Wie finden Sie alle Klassen, die eine bestimmte Schnittstelle implementieren?
- 17. Dupliziere guava.jar im Klassenpfad
- 18. Alle Schnittstellen basierend auf dem Verzeichnis der Implementierungen neu erstellen
- 19. Mehrere Log4j.properties-Dateien im Klassenpfad
- 20. Was ist ein gutes Muster zum Speichern von Implementierungen einer Schnittstelle und Abrufen bestimmter Implementierungen?
- 21. Gradle kann Klassenpfad für Android Plugin nicht finden
- 22. JBoss: WAR-Datei in EAR kann die JAR-Bibliothek im Klassenpfad nicht finden
- 23. Wie für alle Implementierungen eines generischen Typs scannen mit Ninject
- 24. Schreiben eines einzelnen Einheitentests für mehrere Implementierungen einer Schnittstelle
- 25. Wie lese ich ein Verzeichnis aus dem Klassenpfad der Laufzeit?
- 26. Mock-Implementierungen in C++
- 27. Sellerie in Django, Wie kann ich alle Aufgaben finden?
- 28. ProGuard kann keine Superklasse oder Schnittstelle finden
- 29. Binden Sie mehrere Implementierungen an die gleiche Schnittstelle mit ninject
- 30. Wie kann ich alle Initialisierungen in einem Text finden?
Wenn Sie meinen, Sie möchten alle Implementierungen einmal als Entwicklungsübung finden, würde ich mit dem Tool gehen, auf das Bozho Sie hinweist. Wenn Sie zur Laufzeit im Rahmen Ihres Programms wie Stephen C meinen, würde ich Ihnen dringend empfehlen, etwas anderes zu tun. :-) –
mögliches Duplikat von [Finde Java-Klassen, die eine Schnittstelle implementieren] (http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface) –