package cn.gistack.sm.sjztmd.util;
|
|
import java.lang.reflect.Field;
|
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.Method;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* 反射通用
|
* @param <T>
|
*/
|
public class ReflectCommon<T> {
|
|
/**
|
* 获取对象的属性相关信息
|
* @param model
|
* @return
|
*/
|
public Map test(T model) {
|
//获取说有属性,返回Field类型数组
|
Field[] fields = model.getClass().getDeclaredFields();
|
Map<String, Object> values = new HashMap<String, Object>();
|
|
try {
|
for (int i = 0; i < fields.length; i++) {
|
// 获取属性名
|
String nameinit = fields[i].getName();
|
String name = nameinit;
|
// 将属性名的首字母大写,方便获取set和get方法
|
name = name.substring(0, 1).toUpperCase() + name.substring(1);
|
// 获取属性类型
|
String type = fields[i].getGenericType().toString();
|
|
//如果类型是类,要加class 并指定类路径
|
if (type.equals("class java.lang.String")) {
|
// 构造get方法
|
Method m = model.getClass().getMethod("get" + name);
|
// 调用get方法获取属性值
|
String value = (String) m.invoke(model);
|
values.put(nameinit, value);
|
}
|
if (type.equals("class java.lang.Integer")) {
|
// 构造get方法
|
Method m = model.getClass().getMethod("get" + name);
|
// 调用get方法获取属性值
|
Integer value = (Integer) m.invoke(model);
|
values.put(nameinit, value);
|
}
|
if (type.equals("int")) {
|
// 构造get方法
|
Method m = model.getClass().getMethod("get" + name);
|
// 调用get方法获取属性值
|
Integer value = (Integer) m.invoke(model);
|
values.put(nameinit, value);
|
}
|
if (type.equals("class java.lang.Boolean")) {
|
// 构造get方法
|
Method m = model.getClass().getMethod("get" + name);
|
// 调用get方法获取属性值
|
String value = (String) m.invoke(model);
|
values.put(nameinit, value);
|
}
|
if (type.equals("class java.util.Date")) {
|
Method m = model.getClass().getMethod("get" + name);
|
Date value = (Date) m.invoke(model);
|
values.put(nameinit, value);
|
}
|
}
|
} catch (NoSuchMethodException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (SecurityException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (IllegalAccessException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (IllegalArgumentException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
} catch (InvocationTargetException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
// 返回
|
return values;
|
}
|
|
/**
|
* 通过属性名称获取属性值
|
* @param model
|
* @param fieldName 属性名
|
* @return
|
*/
|
public Object getFieldValue(T model,String fieldName) {
|
//获取说有属性,返回Field类型数组
|
Field[] fields = model.getClass().getDeclaredFields();
|
|
try {
|
for (Field field : fields) {
|
if (field.getName().equals(fieldName)) {
|
// 将属性名的首字母大写,方便获取set和get方法
|
fieldName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
|
// 构造get方法
|
Method m = model.getClass().getMethod("get" + fieldName);
|
// 调用get方法获取属性值并返回
|
return m.invoke(model);
|
}
|
}
|
}catch (Exception e) {
|
e.printStackTrace();
|
}
|
// 返回
|
return null;
|
}
|
|
/**
|
* 通过属性名称给属性赋值
|
* @param model
|
* @param fieldName 属性名
|
* @param value 值
|
* @return
|
*/
|
public void setFieldValue(T model,String fieldName,Object value) {
|
//获取说有属性,返回Field类型数组
|
Field[] fields = model.getClass().getDeclaredFields();
|
|
try {
|
for (Field field : fields) {
|
if (field.getName().equals(fieldName)) {
|
field.setAccessible(true);
|
field.set(model,value);
|
}
|
}
|
}catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
// public static void main(String[] args) {
|
// User user = new User();
|
// user.setAccount("123456");
|
// ReflectCommon<User> reflectCommon = new ReflectCommon<User>();
|
// String account =(String) reflectCommon.getFieldValue(user, "account");
|
// System.out.println("account = " + account);
|
// reflectCommon.setFieldValue(user,"account","9999");
|
// System.out.println("newaccount = " + user.getAccount());
|
// }
|
}
|