2010-06-26 14 views
10

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?

+0

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. :-) –

+0

mögliches Duplikat von [Finde Java-Klassen, die eine Schnittstelle implementieren] (http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface) –

Antwort

5

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.

21

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

+0

Nifty ........ .. –

+1

+1 Ich wusste nie, 'java.util.ServiceLoader' existiert - sehr praktisch. –

+0

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. –

Verwandte Themen