原文:https://blog.csdn.net/u011704894/article/details/50548925
ReflectUtil:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Java反射工具类<br>
* 提供以下几个功能:<br>
* 1. 取最简类名<br>
* 2. 动态赋值<br>
* 3. 动态取值<br>
* 4. 判断是否普通类型(自定义成员变量)<br>
* 5. 动态取指定类的所有属性名<br>
* @author nmyy
* @version 1.0
*/
public class ReflectUtil {
/**
* custom commmon field type
*/
public static String[] commonFieldType = {
"int", "long", "short", "double", "float", "char", "byte", "boolean",
"class java.lang.String", "class java.lang.Integer", "class java.lang.Long",
"class java.lang.Short", "class java.lang.Double", "class java.lang.Float",
"class java.lang.Byte", "class java.lang.Boolean", "class java.math.BigDecimal"
};
/**
* 获取最简类名(去除包名)<br>
* eg : com.csdn.util.ReflectUtil > ReflectUtil
* @param className
* @return simpleClassName
* @author nmyy
*/
public static String getSimpleClassName(String className) {
return className.substring(className.lastIndexOf(".") + 1);
}
/**
* 为指定对象的指定属性动态赋予指定值
* @param obj 指定对象
* @param fieldName 指定属性
* @param value 指定值
* @return obj
* @author nmyy
*/
public static Object dynamicSetValue(Object obj, String fieldName, Object value) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase(); // 取属性首字母转大写
String setMethodName = "set" + firstLetter + fieldName.substring(1); // set方法名
Field field = obj.getClass().getDeclaredField(fieldName); // 获取属性
Method setMethod = obj.getClass().getDeclaredMethod(setMethodName, field.getType()); // 获取set方法
setMethod.invoke(obj, value); // 通过set方法动态赋值
// obj.getClass().getDeclaredField(fieldName).set(obj, value) 为直接对指定public属性赋值,不实用
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
/**
* 动态获取指定对象指定属性的值
* @param obj 指定对象
* @param fieldName 指定属性
* @return 属性值
* @author nmyy
*/
public static Object dynamicGetValue(Object obj, String fieldName) {
Object value = null;
try {
//if ( isCommonTypeField(obj, fieldName) ) { // 限普通类型
String firstLetter = fieldName.substring(0, 1).toUpperCase(); // 取属性首字母转大写
String getMethodName = "get" + firstLetter + fieldName.substring(1); // get方法名
Method getMethod = obj.getClass().getDeclaredMethod(getMethodName); // 获取get方法
value = getMethod.invoke(obj); // 动态取值
//}
} catch (Exception e) {
e.printStackTrace();
}
return value;
}
/**
* 判断指定对象中的指定属性名的类型是否属于自定义普通数据类型
* @param obj 指定对象
* @param fieldName 指定属性名
* @return
* @author nmyy
*/
public static boolean isCommonTypeField(Object obj, String fieldName) {
boolean result = false;
try {
Field field = obj.getClass().getDeclaredField(fieldName);
String type = field.getGenericType().toString();
for ( int i = 0; i < commonFieldType.length; i++ ) {
if ( commonFieldType[i].equals(type) ) {
result = true;
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 获取指定类的所有属性名
* @param className 指定类全名
* @return 所有属性名
* @author nmyy
*/
public static String[] getAllFieldName(String className) {
String[] fieldName = null;
try {
Field[] fields = Class.forName(className).getDeclaredFields();
fieldName = new String[fields.length];
for ( int i = 0; i < fields.length; i++ ) {
fieldName[i] = fields[i].getName();
}
} catch (Exception e) {
e.printStackTrace();
}
return fieldName;
}
}