我只有大約半年的Java經驗,所以請原諒我缺乏知識。我試着做一些谷歌搜索,我對此有一些想法,只有幾個漏洞需要填寫。Java動態工廠
我正在嘗試爲我正在執行的程序創建一個「動態工廠」。這樣做的基礎是我希望人們能夠將類文件插入到文件夾中,然後將它們加載到我的工廠中,以便稍後創建它們的新實例。
這就是我現在所擁有的:
import java.util.HashMap;
import java.util.Map;
public class KitManager {
private Map<String, Class<? extends Kit>> kitMap;
public KitManager() {
kitMap = new HashMap<String, Class<? extends Kit>>();
}
public Kit makeKit(String kitname) {
try {
return kitMap.get(kitname).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
現在什麼,我試圖找出是如何讓所有的類文件夾內,確保它們延伸套件,然後將其插入放入地圖中以便稍後創建它們的實例。這是我卡住的地方,我想不出有什麼好的方法讓類加載到地圖中,而不需要在配置文件中找到類名和查找字符串。我的想法是在每個類中都有靜態代碼,將自己插入到HashMap中,但我不確定這是如何工作的。我真正要求的是一個關於如何去完成我的目標的想法。 (有一個用戶可以輸入類的文件夾(擴展Kit),然後當我的程序被加載時,這些類會動態加載到我的kitMap中)
類加載器的目的究竟是什麼?編輯:所以顯然評論不喜歡裏面的代碼。難道我不能像file.getClass()。asSubclass(Kit.class)那樣做,並將其添加到hashmap中(假設一切安裝正確,文件擴展工具包等等) – Phiction
@ user2792581 * *只有通過ClassLoader才能獲得虛擬機的類。問題是File.getClass()根本不存在。 ClassLoader是從虛擬機中的類文件到實際類的橋樑。 – Durandal
我假設kitClassLoader.classForName(className);是指kitClassLoader.loadClass()? –
Phiction