ReflectUtil

没写完。。。有兴趣的可以补充。


package cn.bisoft.java.deep;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
* 反射工具类.
*
* @author tangliang
*
*/
@SuppressWarnings("rawtypes")
public class ReflectUtil {

private ReflectUtil() {
}

/**
* 获取所有构造方法.
*
* @param clz
* @return Set<Constructor>
*/
public static Set<Constructor> getConstructors(Class<?> clz) {

Set<Constructor> constructors = new HashSet<Constructor>();

constructors.addAll(Arrays.asList(clz.getConstructors()));

constructors.addAll(Arrays.asList(clz.getDeclaredConstructors()));

return constructors;
}

/**
* 获取本类或接口的所有方法.
*
* @param clz
* @return Set<Method>
*/
public static Set<Method> getMethods(Class<?> clz) {

Set<Method> methods = new HashSet<Method>();

methods.addAll(Arrays.asList(clz.getMethods()));

methods.addAll(Arrays.asList(clz.getDeclaredMethods()));

return methods;
}

/**
* 获取类所有接口和父类.
*
* @param clz
* @return Set<Class>
*/
public static Set<Class> getClasses(Class<?> clz) {

Set<Class> classes = new HashSet<Class>();

Class<?>[] interfaces = clz.getInterfaces();

Class<?> superClass = clz.getSuperclass();

classes.addAll(Arrays.asList(interfaces));

classes.add(superClass);

return classes;
}

/**
* 获取本类或接口的所有方法和继承、实现方法, 但不包括构造方法.
*
* @param clz
* @return Set<Method>
*/
public static Set<Method> getAllMethods(Class<?> clz) {
Set<Class> classes = getClasses(clz);
Set<Method> methods = getMethods(clz);

for (Class clazz : classes) {
methods.addAll(getMethods(clazz));
}

return methods;
}

/**
* 快速创建任何对象.
*
* @param className
* @return Object
*/
public static Object newInstance(String className) {
try {
Constructor constructor = getNoParamsConstructor(getContextClassLoader()
.loadClass(className));

constructor.setAccessible(true);

return constructor.newInstance((Object[]) null);

} catch (Exception e) {
e.printStackTrace();
}

return null;
}

/**
* 当前线程类加载器
*
* @return ClassLoader
*/
public static ClassLoader getContextClassLoader() {
return Thread.currentThread().getContextClassLoader();
}

/**
* CLASSPATH 类加载器
*
* @return ClassLoader
*/
public static ClassLoader getSystemClassLoader() {
return ClassLoader.getSystemClassLoader();
}

/**
* 获取无参构造方法.
*
* @param clz
* @return ClassLoader
*/
public static Constructor getNoParamsConstructor(Class<?> clz) {
for (Constructor constructor : getConstructors(clz)) {
if (0 == constructor.getParameterTypes().length) {
return constructor;
}
}

return null;
}

// *********** BEGIN TEST *****************

public static void main(String[] args) {
Set<Method> methods = ReflectUtil.getAllMethods(ReflectUtil.class);

for (Method method : methods) {
System.out.println(method.getDeclaringClass().getName() + " | "
+ method.getName() + " | "
+ method.getParameterTypes().length);
}
}

// *********** END TEST *****************

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值