【JAVA】反射工具类

来源:互联网 发布:分层数据流程图 编辑:程序博客网 时间:2024/05/22 08:28

JAVA反射技术相当好用,制作为工具类后更方便使用,话不多说,上源码:

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;}}



End .


0 0
原创粉丝点击