ReflectUtil反射工具类

原文: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

ReflectUtil反射工具类的相关文章

反射工具类——ReflectUtils

测试方法:根据已知的方法名,来反射调用方法 package com.redmoon.forum.job; import java.util.ArrayList; import java.util.List; import com.common.utils.ReflectUtils; public class Test { private String name; public String getName() { return name; } public void setName(String

Java 反射工具类

package com.su.dolphin.utils; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * * @className: ReflectionUti

Spring 反射工具类ReflectionUtils

public static final int PUBLIC = 0x00000001; public static final int PRIVATE = 0x00000002; public static final int PROTECTED = 0x00000004; public static final int STATIC = 0x00000008; public static final int FINAL = 0x00000010; public static final in

反射工具类(调用父类的方法和字段)

使用这个工具类,可以完成父类,基类,方法,字段,无论什么权限都可以调用. package com.reflect; /** * 基类 * @author jianghui */ public class GrandParent { public String publicField = "1"; String defaultField = "2"; protected String protectedField = "3"; private St

Java 反射工具类封装

封装了常用的反射相关方法 public class ReflectUtil { /** * 通过类路径获取Class * * @author LHY <br> * Description <br> * LastModified 2014-5-9 Content <br> */ public static Class<?> getClass(String packagePath) throws ClassNotFoundException { return C

反射工具类

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class ReflectionUtils { /** * 循环向上转型, 获取对象的 DeclaredMethod * @param object : 子类对象 * @param methodName : 父类中的方法名 * @param param

Spring的反射工具类 ReflectionUtils

/* * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://

Atitit apache 和guava的反射工具

apache1 Spring的反射工具类 ReflectionUtils1 Guava 反射工具2 apache  34             7,340 ConstructorUtils.java 34            16,263 FieldUtils.java 34             4,918 MemberUtils.java 34            14,175 MethodUtils.java 34            30,316 TypeUtils.java

《项目架构那点儿事》——工具类,你喜欢你就拿去

[前言]众所周知,各式各样的Util类为我们提供了便利,也同时减少了我们对底层硬编码的时间,包括对字符串的操作,文件操作,反射的操作,泛型的操作,以及熟知 的分页类,Json解析类.日期工具类等,这里把我开发的项目中用到过的工具类分享出来,都是经过多个项目的开发积累而锤炼出来的,提供给大家交流和学 习. [目录]            1.文件操作类 FileUtil            2.反射工具类 ReflectionUtil            3.泛型工具类 GenericsUti