【发布时间】:2016-07-24 00:02:45
【问题描述】:
我正在尝试从exchanges.jar 文件中加载类文件(不实现任何通用接口)并将其存储在arraylist 中 以前,我使用
从目录加载 .class 文件(实现通用接口)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;
}
}
【问题讨论】:
-
我可能是错的,但这听起来不像是好的编程习惯。你想用这个类数组列表做什么?
-
@user 从 jar 加载类所需要做的就是将 jar 放在类路径中:
java -cp .;myjar.jar,是否有理由让您觉得需要在运行时加载类? -
这些文件实际上是在 jar 文件中吗?您的代码看起来像是在磁盘上寻找它们...?
-
休斯顿我们有问题!!!!!!!!!