`

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  *****************

}

分享到:
评论

相关推荐

    ReflectUtil2.0

    "ReflectUtil2.0" 是一个移植自Xposed框架的反射工具类,用于增强对Android系统和应用的自定义修改能力。Xposed是一个在Android系统上运行的框架,它允许开发者通过编写模块来改变系统的各种行为,而无需修改APK或...

    ReflectUtil反射工具类

    该代码经过作者的优化,可直接使用,反射一个实体,从试题中获取值

    ReflectUtil java反射工具类

    ReflectUtil java反射工具类

    ReflectUtil.cs

    orm工具类,可直接使用后台设计的类对数据库做增删改查,不需要手动编写sql

    Java常用工具包 Jodd

    Java常用工具包Jodd是一个强大的开源库,专为Java开发者设计,提供了许多实用的功能和类,以简化开发过程。...下面我们将深入探讨Jodd的核心功能和相关知识点。 ... 2. **数据转换**:Jodd的Json模块提供了一套简单的...

    移植Xposed的反射工具类

    4. **ReflectUtil.java**:这个文件可能是移植后的`XposedHelper`替代类,它可能包含了上述的反射操作实现。在使用前,我们需要阅读源代码并理解其实现细节,确保其功能与`XposedHelper`一致。 5. **commons-lang3-...

    mybatis3 物理分页源代码

    MappedStatement mappedStatement = (MappedStatement) ReflectUtil.getFieldValue(statementHandler, "mappedStatement"); BoundSql boundSql = statementHandler.getBoundSql(); // 获取数据库方言 ...

    Xposed工具XposedBridgeApi-89.jar

    - 动态修改系统参数:通过`ReflectUtil`类可以反射修改系统类的字段值,实现动态配置。 - 自定义事件监听:`XposedHelpers.findAndHookMethod()`等方法可以监听和处理指定方法的调用。 在实际应用中,开发者可以...

    jdk1.8的src,扩展了sun.reflect,unsafe

    在`sun.reflect`包下,有诸如`ReflectPermission`、`ReflectUtil`和`GenericSignatureFormatError`等类,它们支持反射操作的执行。在JDK 1.8中,这个包的扩展可能涉及到对反射机制的优化或者增加了新的API,使得...

    jdk 1.8源码包,包含sun源码,绝对真实,自己看大小就懂了,靠谱

    在"sun.misc"包下,你可以找到`ReflectUtil`等关键类,它们在反射操作中起到核心作用。 另外,NIO(New Input/Output)是Java提供的一种非阻塞I/O模型,相比传统的阻塞I/O,NIO能显著提高在处理大量并发连接时的...

    JAVA开发中重用到的Utils,通用工具类 utils.rar

    7. **反射工具类(ReflectUtil)**:通过反射机制,可以动态访问和修改类、接口、字段和方法,这对于框架开发或者测试非常有用。例如,`getFieldValue()`可以获取指定对象某个字段的值。 8. **线程工具类(ThreadUtil)...

    java常用工具类iceroot开源类库.zip

    7. **反射和注解处理**:ReflectUtil和AnnotationUtil类可能提供了对Java反射和注解的高级封装,使得这些底层API的使用更加简单易懂。 8. **线程与并发**:ThreadUtil类可能包含线程创建、线程池管理、同步控制等多...

    java常用工具类和接口返回对象.zip

    6. **ReflectUtil**:反射工具类,用于动态地获取类的信息,创建对象,调用方法,设置或获取字段值。反射在处理一些元编程场景时非常有用。 7. **ThreadUtil**:线程相关工具类,可能会有线程的启动、停止、同步、...

    JAVA工具模块TBOX

    7. **反射和注解工具类(ReflectUtil, AnnotationUtil)**:这两个工具类提供对Java反射和注解的高级操作,可以帮助开发者更方便地获取类信息、字段信息、方法信息,以及处理注解的逻辑。 8. **线程和并发工具类...

    Hutool的api等可参考的文档

    - **反射工具**:`ReflectUtil`简化了Java反射操作。 - **泛型工具**:`TypeUtil`处理泛型相关的类型获取和比较。 3. **其他模块** - **分页工具**:`PageUtil`实现了简单的分页处理。 - **剪贴板工具**:`...

    fileutil_2.10-1.0.0.zip

    例如,Mirage库可能包含了一个名为ReflectUtil的类,这个类中集成了常见的反射操作,如安全的获取和设置字段值,以及无异常的调用方法。这样的设计有助于减少代码中的异常处理,提升代码的可读性和可维护性。 此外...

    Java常用工具类(免费)

    反射是Java中一项强大的特性,ReflectUtil提供了一系列使用反射进行操作的方法。 ##### 1. 得到某个对象的公共属性: `Object getProperty(Object owner, String fieldName)` 通过反射获取对象的某个公共属性的值。 ...

    java工具类28+26.rar

    9. **反射工具类**:如ReflectUtil,可能包含类的加载、对象的创建、方法的调用等反射操作,方便进行动态编程。 10. **编码解码工具类**:如EncodeDecodeUtil,可能包括Base64编码、Hex编码、URL编码等,对于数据...

    常用工具类

    13. **反射工具类**:如`ReflectUtil`,提供动态获取类信息、创建对象、调用方法等功能。 14. **单位转换工具类**:如`UnitConvertUtil`,可以进行长度、重量、体积等单位之间的转换。 15. **颜色处理工具类**:如`...

    Hutool 参考文档.pdf

    反射工具(ReflectUtil)、泛型类型工具(TypeUtil)、分页工具(PageUtil)、剪贴板工具(ClipboardUtil)和类工具(ClassUtil)等涉及Java反射机制和Java类的高级操作。 类加载工具(ClassLoaderUtil)、枚举工具...

Global site tag (gtag.js) - Google Analytics