import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.beans.PropertyDescriptor;
public class PropertyUtil {
public static PropertyDescriptor getPropertyDescriptor(Class clazz, String propertyName){
StringBuffer sb = new StringBuffer();//构建一个可变字符串用来构建方法名称
Method setMethod = null;
Method getMethod = null;
PropertyDescriptor pd =null;
try
{
Field f = clazz.getDeclaredField(propertyName);//根据字段名来获取字段
if(f==null){
//构建方法的后缀
String methodEnd = propertyName.substring(0,1).toLowerCase()+propertyName.substring(1);
sb.append("set"+methodEnd);//构建set方法
//构建set 方法
setMethod = clazz.getDeclaredMethod(sb.toString(),new Class[]{f.getType()} );
sb.delete(0, sb.length());//清空整个可变字符串
sb.append("get"+methodEnd);//构建get方法
//构建get 方法
getMethod = clazz.getDeclaredMethod(sb.toString(), new Class[]{});
//构建一个属性描述器 把对应属性 propertyName 的 get 和 set 方法保存到属性描述器中
pd = new PropertyDescriptor(propertyName,getMethod,setMethod);
}
}catch(Exception ex){
ex.printStackTrace();
}
return pd;
}
public static void setProperty(Object obj,String propertyName,Object value){
Class clazz = obj.getClass();//获取对象的类型
PropertyDescriptor pd = getPropertyDescriptor(clazz,propertyName);//获取 clazz 类型中的 propertyName 的属性描述器
Method setMethod = pd.getWriteMethod();//从属性描述器中获取 set 方法
try {
setMethod.invoke(obj, new Object[]{value});//调用 set 方法将传入的value值保存属性中去
} catch (Exception e){
e.printStackTrace();
}
}
public static Object getProperty(Object obj, String propertyName){
Class clazz = obj.getClass();//获取对象的类型
PropertyDescriptor pd = getPropertyDescriptor(clazz,propertyName);//获取 clazz 类型中的 propertyName 的属性描述器
Method getMethod = pd.getReadMethod();//从属性描述器中获取 get 方法
Object value =null ;
try {
value = getMethod.invoke(clazz, new Object[]{});//调用方法获取方法的返回值
} catch (Exception e) {
e.printStackTrace();
}
return value;//返回值
}
}
分享到:
相关推荐
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
java 反射 调用私有方法(有参数私有方法)获取私有属性值
通过Java反射调用方法,适合初级自学者,通俗易懂
Java 反射创建get set方法及反射方法的调用
调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用数组参数的方法 调用私有方法
本例演示了如何使用反射,调用类的静态方法,封装了工具类ClsTool,统一实现静态方法的调用。使用反射,在特定场景下,能够很好的简化代码。例如mybatis
利用java反射原理实现方法的动态调用。
spring与java反射结合动态定义类及调用函数,实现类的动态定义和函数的动态调用。 为有动态调用的web应用提供一点点借鉴,相互学习。
Java 反射调用设置值
java反射调用set方法时如果让参数做自动类型转换5 这段时间学习java的反射机制想实现一个功能:遍历一个Map,然后利用反射机制调用BO的set方法,完成BO属性的自动注入。这样设计的初衷是解决Excel数据导入问题中的...
Java 反射详解(包含私有方法属性的调用)
利用java反射调用实现对字符串的解析,成功调入函数,并且返回值
万能的反射封装接口,值得下载参考,当成util
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
使用JAVA反射机制动态调用 计算器对象的加法,减法函数。 使用JAVA反射机制修改一个学生对象 的私有数据成员(不允许调用setters) 使用的类有Class, Method, Field
该篇文章主要介绍当我们碰到参数或者返回值是一个对象时,如何通过frida反射调用该对象的方法(methods)与获取该对象的字段(fields)。感兴趣的朋友可以下载下来看看,了解了解
通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法
下面小编就为大家带来一篇利用java反射机制实现自动调用类的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Method,invoke,getMethod等反射私有方法和私有属性