在描述我的問題之前,讓我說我懷疑我可能完全缺乏搜索的正確術語,這就是爲什麼我在stackoverflor上的搜索沒有成果。因此,對答案的鏈接也將非常感激。工廠類自動加載Java中特定超類的子類?
我試圖做一個庫,有一個工廠,讓我們稱之爲「MyFactory」。 MyFactory有一個方法可以返回抽象類「MySuper」的對象,也可以將可拓子類暴露給「MySuper」。該庫的目的是擴展很多,所以經常會添加「MySuper」的子類,然後庫將被重新編譯,並轉儲到使用它的應用程序的庫文件夾中。
我想要的是能夠將「MySuper」的子類添加到庫中,並讓「MyFactory」知道它,而不需要做任何事情而不是創建一個新的「MySuper」子類。 。
到目前爲止,我使用反射來使「MyFactory」創造「MySuper」類型的新實例,通過給類名的方法,像這樣:
public MySuper getSuperObject(String name) {
return (MySuper) Class.forName("my.package." + name).newInstance(); }
但我怎麼能得到工廠將「MySuper」課程公開爲fx一個字符串列表,所以使用該庫的應用程序知道他們可以調用什麼?我可以迭代包的內容嗎?
我打開的解決方案中,最重要的是,在未來它應該是自由添加新的「MySuper」子類很麻煩..
感謝:-)
UPDATE :
我只想說明我已經找到一個很好的Java庫,它以簡單的方式處理反射,並且允許您搜索特定類的子類型。所以我的問題可以通過該庫解決(我已經測試過)。這裏是一個鏈接:http://code.google.com/p/reflections/
看起來非常好。但是,我該如何讓庫知道子類,以便我可以向使用該庫的應用程序暴露諸如「ArrayList mySubClasses」之類的東西?我的谷歌搜索主要揭示了實際實現子類的方法(就像你給我展示的那樣)。我懷疑我需要一種方法來調查項目中的軟件包,看它是否包含擴展MySuper的類。 –
Stegger
林不知道我是否理解正確,但你正在尋找'找到給定的類/接口的所有子類?'。如果是這樣的話,我早已寫了一篇博客。您可能會發現這對返回給定類的'List'有幫助。希望那麼你可以使用反射爲這些類創建實例。這裏是鏈接http://nonstop-rp.blogspot.in/2010/05/java-reflection-know-subclasses-of.html ..正如我所說這是一個古老的博客.. –
這看起來很有前途,是正是我正在尋找的東西。我會接受你的答案 - 並在你的博客中窺探。 – Stegger