java反射设置属性值和赋值,简单实用

package com.shentb.hmb.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflexUtils {

    /**
     * 反射根据属性名获取属性值
     *
     * @param fieldName  属性名
     * @param object 实体类对象
     * @return
     */
    public static Object getFieldValueByFieldName(String fieldName, Object object) {
        try {
            Field field = object.getClass().getDeclaredField(fieldName);
            //设置对象的访问权限,保证对private的属性的访问
            field.setAccessible(true);
            return  field.get(object);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 通过反射设置属性的值
     * @param fieldName  属性名
     * @param fieldValue  属性值
     * @param object  实体类对象
     * @param parameterTypes  设置属性值的类型
     * @throws
     */
    public static void setFieldValueByFieldName(String fieldName,Object fieldValue,Object object,Class<?>... parameterTypes) {
        try {
            Field[] fields = object.getClass().getDeclaredFields();
            for(int i=0;i<fields.length;i++){
                Field field = fields[i];
                //字段名称
                String name = field.getName();
                if(name.equals(fieldName)){
                    field.setAccessible(true);
                    //field.set(object,fieldValue) 可代替下面的拼接set方法;
                    //将属性的首字符大写,方便构造get,set方法
                    String methname = name.substring(0,1).toUpperCase()+name.substring(1);
                    Method m = object.getClass().getMethod("set" + methname,parameterTypes);
                    m.invoke(object,fieldValue);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
发布了288 篇原创文章 · 获赞 88 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/ypp91zr/article/details/90181837