2010-06-26 285 views
10

我正在實現一個接口,現在我想在類路徑中獲得此接口的所有實現。這是可能的還是我應該做別的事情?如何在類路徑中找到所有接口的實現?

+0

如果你的意思是,你想一次性找到所有的實現作爲一個開發練習,我會使用Bozho指出的工具。如果你的意思是在運行時,作爲你的程序的一部分,就像Stephen C一樣,我強烈建議你做別的事情。 :-) – 2010-06-26 07:52:10

+0

[查找java類實現接口]的可能重複(http://stackoverflow.com/questions/435890/find-java-classes-implementing-an-interface) – 2010-06-26 07:59:18

回答

5

在最好的情況,這將是昂貴的。在最壞的情況下(取決於類加載器)它可能是不可能的。

我強烈建議您尋找您嘗試解決的潛在問題的替代方法。

21

Reflections庫將讓你這樣做(在某種程度上):

Set<Class<? extends SomeClassOrInterface>> subTypes = 
    reflections.getSubTypesOf(SomeClassOrInterface.class); 

不過,我不會建議。設想一個典型的帶有50個外部罐子的類路徑,每個罐子都是一個像Spring,hibernate,aspectj,jsf等這樣的大框架。這需要花費很多時間。

如果你想有某種插件機制,以便其他人可以與執行實施您的接口和電源罐,再看看java.util.ServiceLoader

+0

Nifty ........ .. – 2010-06-26 07:50:59

+1

+1我從來不知道'java.util.ServiceLoader'存在 - 非常方便。 – 2014-04-29 08:15:59

+0

感謝您的回答!雖然您不推薦使用它,但我有一個似乎非常適合此解決方案的用例,並且我可以異步運行查詢,而不會對應用程序的運行產生很大影響。然後我只在他們完成收集時才提供結果。 – 2015-05-20 08:31:06

相關問題