package com.shentb.hmb.utils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflexUtils {
/**
* 反射根据属性名获取属性值
*
* @param fieldName 属性名
* @param object 实体类对象
* @return
*/
public static Object getFieldValueByFieldName(String fieldName, Object object) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
//设置对象的访问权限,保证对private的属性的访问
field.setAccessible(true);
return field.get(object);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 通过反射设置属性的值
* @param fieldName 属性名
* @param fieldValue 属性值
* @param object 实体类对象
* @param parameterTypes 设置属性值的类型
* @throws
*/
public static void setFieldValueByFieldName(String fieldName,Object fieldValue,Object object,Class<?>... parameterTypes) {
try {
Field[] fields = object.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
Field field = fields[i];
//字段名称
String name = field.getName();
if(name.equals(fieldName)){
field.setAccessible(true);
//field.set(object,fieldValue) 可代替下面的拼接set方法;
//将属性的首字符大写,方便构造get,set方法
String methname = name.substring(0,1).toUpperCase()+name.substring(1);
Method m = object.getClass().getMethod("set" + methname,parameterTypes);
m.invoke(object,fieldValue);
}
}
}catch (Exception e){
e.printStackTrace();
}
}
}