原文: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; } }
原文地址:https://www.cnblogs.com/lshan/p/10956977.html
时间: 2024-11-08 21:26:36