java反射获取包下所有类,java反射获取类的方法
java 获取指定包下类的实例(100分)
1.首先,把你指定的包,转换成本地路径
2.列出本地路径下的所有类,并把.class去掉,再拼接上 包名
3.根据上面获取的类的全限定名,依次利用Class.forName(StringName).newInstance()来创建实例
4.把创建好的实例添加到集合中。
Code:
/***********
* 根据包名来获取此包下所有的类名及其实例
* @param packName
* @return
*/
public static SetObject getObjectsInPackage(String packName){
SetObject objs = new HashSetObject();
String packageName = packName;
String packageDirName = packageName.replace(".", "/");
EnumerationURL 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;
}
java如何通过反射获取包中所有的类?
先通过IO,定位到这个包
通过File.list得到一个包含这个包下所有class的文件的数组。
循环这个数组,用包名拼接每一个遍历出来的文件的名字,得到每一个完整的类名(即,包名加类名)
通过class.forname反射得到每一个类实例
java中如何通过反射获取一个.java文件中的所有类。
对象.gerClass().getName()就是了,对象时谁的,最后就是谁的全名,不会有内部类的区别
如果没有对象那就是:类名.class.getName(),不过这样是闲的无聊,有类名,再返回字符串形式的类名