我試圖從exchanges.jar文件加載的類文件(不執行任何通用的接口),並將其存儲在一個ArrayList 以前,我加載的.class文件(它實現了一個通用的接口)使用如何從一個jar文件加載類,並將其存儲在一個ArrayList
package edu.uh.cs.assign2;
import java.io.File;
import java.util.ArrayList;
import edu.uh.cs.iexchangeservices.IExchange;
public class ExchangeManager {
private ArrayList<IExchange> exchangeList = new ArrayList<IExchange>();
public ArrayList<IExchange> findClasses() throws Exception {
File classDirectoryPath = new File(Thread.currentThread()
.getContextClassLoader()
.getResource("exchangeservices".replace('.', '/')).getFile());
return loadExchangeClasses(classDirectoryPath);
}
public ArrayList<IExchange> loadExchangeClasses(File classDirectoryPath)
throws Exception {
if (!classDirectoryPath.exists())
throw new LoadExchangesException("path not found");
String[] exchangeClasses = classDirectoryPath.list();
for (String exchangeClass : exchangeClasses) {
if (exchangeClass.endsWith(".class")) {
Object object = (IExchange) Class.forName(
"exchangeservices"
+ '.'
+ exchangeClass.substring(0,
exchangeClass.length() - 6))
.newInstance();
if (object instanceof IExchange)
exchangeList.add((IExchange) object);
}
}
return exchangeList;
}
}
我可能是錯的,但是,這聽起來不像是很好的編程習慣。你想用這個類的數組列表來做什麼? – 2012-03-21 00:20:47
@user所有你需要做的,從一個罐子加載類是把罐子您的類路徑:'java命令; myjar.jar',有沒有爲什麼你覺得你需要加載在運行時類的理由? – 2012-03-21 00:20:52
這些文件實際上是在一個jar文件中嗎?你的代碼看起來像是在磁盤上尋找它們...? – Adam 2012-03-21 00:20:56