/**
*
* @author king
*
* 查找类接口
*/
public class ClassUtils {
public static List<Class> getAllClassByInterface(Class c) {//按照接口字母顺序查找
List<Class> returnClassList = new ArrayList<Class>();
if (c.isInterface()) {
String packageName = c.getPackage().getName();
try {
try {
List<Class> allClass = getClasses(packageName);
for (int i = 0, len = allClass.size(); i < len; i++) {
if (c.isAssignableFrom(allClass.get(i))) {
if (!c.equals(allClass.get(i))) {
returnClassList.add(allClass.get(i));
}
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return returnClassList;
}
private static List<Class> getClasses(String packageName)
throws IOException, ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
}
private static List<Class> findClasses(File directory, String packageName)
throws ClassNotFoundException {
List<Class> classes = new ArrayList<Class>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
assert !file.getName().contains(".");
classes.addAll(findClasses(file,
packageName + "." + file.getName()));
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName
+ '.'
+ file.getName().substring(0,
file.getName().length() - 6)));
}
}
return classes;
}
}
分享到:
相关推荐
反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 框架=反射+注解+设计模式 1.是什么? 加载完类之后,在堆内的方法区中就产生了一个Class类型的...
Java——枚举: enum关键字、Enum类 类集对枚举的支持——EnumMap类与EnumSet类 枚举类实现接口、在枚举类中定义抽象方法 Java反射机制: Class类、Class类的使用 反射的应用:取得类的结构
智能反射面——大有前景的6G技术
其中一个类的运行结果是: 该对象的类型是:class package2.Customer id :1234 name :zhansan age :19 zhansan 19 1234 --------------------------- package2.Customer@9664a1 package2.Customer@1a8c4e7
java 反射机制 字符串 对象 将java对象的数据封装成为xml格式的字符串,或将字符串解析为java的对象形式
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
本文档时关于Java的反射的一个组件Field的详细描述
本文实例讲述了PHP使用反射机制实现查找类和方法的所在位置。分享给大家供大家参考,具体如下: //参数1是类名,参数2是方法名 $func = new ReflectionMethod('UnifiedOrder_pub', 'getPrepayId'); //从第几行开始 $...
详解反射机制获取类想信息
java反射机制的学习心得(csdn)————程序
c#插件模式 ——例子(利用反射机制) foreach (ListViewItem item in listView1.Items) { if (item.Checked) { Assembly assembly = Assembly.LoadFile(Path.Combine(pluginpath, "TestComWin.dll")); // ...
Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制
类的反射机制 自己遇到的一个知识点 通过代理创建出一个类 执行类的方法
轻松掌握java反射技术,虽然讲得比较简单,但是通俗易懂。
Qt 使用QMetaObject实现反射机制代码demo
C#易筋经——反射、反射加壳、反射脱壳、反射注册机
Java中的反射机制Java中的反射机制Java中的反射机制
对于Java基础的巅峰——反射机制的详细描述,反射的入门学习帮手!