java 获取指定包下类的实例(100分)

我想设计一个类似插件载入的模块。获取指定包下所有类的实例。。最好能有实例... 我想设计一个类似插件载入的模块。获取指定包下所有类的实例。。最好能有实例 展开
 我来答
江南无色
推荐于2016-05-02 · TA获得超过105个赞
知道答主
回答量:20
采纳率:0%
帮助的人:27.6万
展开全部
1.首先,把你指定的包,转换成本地路径
2.列出本地路径下的所有类,并把.class去掉,再拼接上 包名
3.根据上面获取的类的全限定名,依次利用Class.forName(StringName).newInstance()来创建实例
4.把创建好的实例添加到集合中。
Code:
/***********
* 根据包名来获取此包下所有的类名及其实例
* @param packName
* @return
*/
public static Set<Object> getObjectsInPackage(String packName){
Set<Object> objs = new HashSet<Object>();
String packageName = packName;
String packageDirName = packageName.replace(".", "/");
Enumeration<URL> dirs = null;
try {
dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName);
//迭代此 Enumeration
while(dirs.hasMoreElements()){
URL url = dirs.nextElement();
File file = new File(url.getFile());
//把此目录下的所有文件列出
String[] classes = file.list();
//循环此数组,并把.class去掉
for(String className : classes){
className = className.substring(0,className.length()-6);
//拼接上包名,变成全限定名
String qName = packageName+"."+className;
//如有需要,把每个类生实一个实例
Object obj = Class.forName(qName).newInstance();
//添加到集合中
objs.add(obj);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return objs;
}
wokao_wg
2013-09-10 · TA获得超过107个赞
知道小有建树答主
回答量:204
采纳率:0%
帮助的人:79.3万
展开全部
可以用java的反射机制获取把
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-09
展开全部
java.lang.ClassLoader
研究这个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式