反射,在各种开源框架中大量使用,特别是SOA类的、Spring等。反射是基础。
package reflect; import java.lang.reflect.Method; /** * 反射工具类 * @author root * */ public class ReflectUtil { /** * 通过反射调用方法(任意个参数) * @param cls 类 * @param methodName 方法名 * @param params 参数 * @param parameterTypes 参数类型 * @return */ public static Object invoke(Class<?> cls, String methodName,Object[] params,Class<?>... parameterTypes) { try { Method method = cls.getDeclaredMethod(methodName, parameterTypes); Object obj = cls.newInstance(); return method.invoke(obj, params); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 通过反射调用方法(单个参数) * @param cls 类 * @param parameterTypes 参数类型 * @param params 参数 * @param methodName 方法名 * @return */ public static Object invoke(Class<?> cls, Class<?> parameterTypes,String methodName,Object params) { try { Method method = cls.getDeclaredMethod(methodName, parameterTypes); Object obj = cls.newInstance(); return method.invoke(obj, params); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 通过反射调用方法(任意个参数) * @param className 完整的类名 * @param methodName 方法名 * @param params 参数名称 * @param parameterTypes 参数类型 * @return */ public static Object invoke(String className, String methodName,Object[] params,Class<?>... parameterTypes) { try { Class<?> cls = Class.forName(className); Method method = cls.getDeclaredMethod(methodName, parameterTypes); return method.invoke(cls.newInstance(), params); } catch (Exception e) { e.printStackTrace(); } return null; } }
测试:
package reflect; public class TestReflect { public static void main(String[] args) { String result = (String) ReflectUtil.invoke(Hello.class, "hello", new String[] { "zs" }, new Class[] { String.class }); System.out.println(result); result = (String) ReflectUtil.invoke(Hello.class, String.class, "hello", "zs"); System.out.println(result); int max = (Integer) ReflectUtil.invoke(Hello.class, "max", new Integer[] { 1, 2 }, new Class[] { int.class, int.class }); System.out.println(max); max = (Integer) ReflectUtil.invoke(Hello.class, "max", new Integer[] { 1, 2 }, new Class[] { int.class, int.class }); System.out.println(max); } } class Hello { public String hello(String name) { return "hello, " + name; } public int max(int a,int b) { return a > b ? a : b; } }
相关推荐
该工具类下载后拷贝到你要用的包,只需该包名即可
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
java组件开发(13)反射工具类
java的泛型和反射机制一直很难理解和应用,这个程序是关于反射和泛型的综合使用,主要实现获取一个类的属性名和方法,并可以获取属性值,存取属性值,属性名和属性值的字符...只是个工具类,没有写测试类,自己测试下啊
java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具...
反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被...
提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名
Xposed框架的核心是其提供的API,其中`XposedHelper`是一个关键的反射工具类,方便开发者对Android系统的类和方法进行操作。本文将详细介绍如何将`XposedHelper`移植到非Xposed环境中,以及在Java反射技术方面的一些...
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
这个"一键换肤,反射工具类"是实现这一功能的关键部分,通过反射技术来实现动态加载不同的主题资源,使得皮肤更换无需重启应用。 反射在Java(包括Android)编程中是一种强大的技术,它允许程序在运行时检查和修改...
在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...
ReflectUtil java反射工具类
Java项目开发用的公用基础模块,包括:Spring容器初始化、配置文件读取工具类、分页对象、Protobuf工具类、反射工具类等
该代码经过作者的优化,可直接使用,反射一个实体,从试题中获取值
ReflectionUtils :反射工具类,包括 --- 通过反射获取实体类中的字段及其中文注释 --- 通过字段名称获得对象中对应的值 --- 驼峰格式字符串转换为下划线格式字符串 ColumnExplain: 使用在实体类字段上,用于标注...
使用的cglib+缓存 1千万次空方法调用 大概3秒~ 直接反射的速度为10秒~ 缓存后反射为 6秒~ 取出安全验证缓存后的速度为 4秒左右~ 另外大概有2秒的性能消耗在字符串拼接缓存中的key造成~ 因此上面带缓存的反射方案...
java 反射工具类,适用于框架开发、平台建设等项目
这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...