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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 获取指定包下类的实例(100分)相关的知识,希望对你有一定的参考价值。

我想设计一个类似插件载入的模块。获取指定包下所有类的实例。。最好能有实例

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;
参考技术A 可以用java的反射机制获取把 参考技术B java.lang.ClassLoader
研究这个

以上是关于java 获取指定包下类的实例(100分)的主要内容,如果未能解决你的问题,请参考以下文章

Java 常用类库之lang包

?Java基础学习——java.lang包下 Class

8 java 笔记

详细的解释下类的封装性,抽象性,继承性和多态性。

Java 基础语法

Java判断一个对象是否为指定类的实例