單個獲取
/**
* 根據屬性名獲取屬性值
*
* @param fieldName
* @param object
* @return
*/
private String getFieldValueByFieldName(String fieldName, Object object) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
//設置對象的訪問權限,保證對private的屬性的訪問
field.setAccessible(true);
return (String) field.get(object);
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
}
/**
* 根據屬性名設置屬性值
*
* @param fieldName
* @param object
* @return
*/
private void setFieldValueByFieldName(String fieldName, Object object, String value) {
try {
// 獲取obj類的字節文件對象
Class c = object.getClass();
// 獲取該類的成員變量
Field f = c.getDeclaredField(fieldName);
// 取消語言訪問檢查
f.setAccessible(true);
// 給變量賦值
f.set(object, value);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
批量獲取
public static <T> T reflection(T targer, Map modifyMap) {
try {
for (Field filed : targer.getClass().getDeclaredFields()) {
filed.setAccessible(true);
Object val = filed.get(targer);
for (Object key : modifyMap.keySet()) {
boolean flag = filed.getName().equals(key);
if (flag) {
filed.set(targer, modifyMap.get(key));
}
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return targer;
}
public static void main(String[] args) {
PdfDataTest test = new PdfDataTest();
test.setColumn1(1111);
Map map = new HashMap();
map.put("column1", 888);
System.out.println("修改前" + test);
ReflectionTools.reflection(test, map);
System.out.println("修改後" + test);
}
效果如下.