我正在開發一個Java應用程序,它將有很多貢獻。我想讓單個包中的課程以某種方式「自我註冊」自己。目前,我們有另一個類,只是增加了每到一個listlike這樣的:允許類「自我註冊」,將自己添加到列表等
ourlist.add(new SomeClassName());
這要求每個貢獻者添加一行像這樣爲自己另外,我想避免的。我想讓應用程序掃描包,並自動將每個類添加到上面的列表中。
我試過使用一些類掃描代碼的軟件包,但班級類型不與我們玩的很好,我太新來java來充分理解這個問題。
我正在開發一個Java應用程序,它將有很多貢獻。我想讓單個包中的課程以某種方式「自我註冊」自己。目前,我們有另一個類,只是增加了每到一個listlike這樣的:允許類「自我註冊」,將自己添加到列表等
ourlist.add(new SomeClassName());
這要求每個貢獻者添加一行像這樣爲自己另外,我想避免的。我想讓應用程序掃描包,並自動將每個類添加到上面的列表中。
我試過使用一些類掃描代碼的軟件包,但班級類型不與我們玩的很好,我太新來java來充分理解這個問題。
運行時還是靜態的?運行時間爲 您可以在類中使用靜態塊,並在側面靜態塊中放置代碼以註冊自己。就像JDBC驅動程序的工作方式並向drivermanager註冊一樣。
Scan the package to get all class name和使用Reflection
創建每個實例添加到list
for(Class claszz: scannedClasses){
list.add(clazz.newInstance());//default constructor
}
試試這個:http://www.dzone.com/snippets/get-all-classes-within-package – alfasin
這就是我試過。它似乎沒有工作,因爲Class []類型不是我們加載的類的相同類型,並且eclipse一直抱怨類型不匹配。我試着改變代碼的類型來匹配,但最後一行,classes.add(Class.forName部分沒有工作。 – helion3
你能告訴我們你的代碼嗎? – alfasin