package com.xiongyingqi.util;
import java.lang.reflect.Field;
import java.util.Vector;
/**
* Created by xiongyingqi on 14-3-10.
*/
public class ClassHelper {
/**
* 获取加载的所有类
*
* @return
*/
public static Class[] getAllClasses() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Class<?> cla = classLoader.getClass();
while (cla != ClassLoader.class)
cla = cla.getSuperclass();
Field field = null;
try {
field = cla.getDeclaredField("classes");
field.setAccessible(true);
Vector<Class> v = null;
try {
v = (Vector<Class>) field.get(classLoader);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
for (int i = 0; i < v.size(); i++) {
System.out.println(v.get(i));
}
return v.toArray(new Class[]{});
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return null;
}
/**
* 检查类是否直接或间接实现接口
*
* @param clazz
* @param enterface
* @return
*/
public static boolean isImplementsInterface(Class clazz, Class enterface) {
Assert.notNull(clazz);
Assert.notNull(enterface);
Class[] interfaces = clazz.getInterfaces();
Class superclass = clazz.getSuperclass();
if (superclass != null) {
boolean implementsInterface = isImplementsInterface(superclass, enterface);
if (implementsInterface) {
return true;
}
}
boolean flag = false;
for (Class anInterface : interfaces) {
if (enterface == anInterface) {
return true;
} else {
flag = isImplementsInterface(anInterface, enterface);
if (flag) {
return flag;
}
}
}
return flag;
}
}