java 获取指定包下类的实例(100分)
3个回答
展开全部
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;
}
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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询