通过反射获取实体对象的属性及对应的属性值

Java SE 专栏收录该内容
20 篇文章 0 订阅

需求
需要获取实体对象的属性及属性值作为key-value形式的NameValuePair参数,用于post请求的参数,为了避免一大段的get代码,考虑使用反射方式进行设置,示例代码如下:

public class Person {
    private String name;
    private String sex;
    private String phone;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

通过反射获取属性及属性值的测试代码如下:

public static void main(String[] args) {
    Person person = new Person();
    person.setName("aaa");
    person.setSex("男");
    person.setPhone("12345566");

    Class clazz = person.getClass();
    // 获取类中声明的字段
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
    	// 避免 can not access a member of class com.java.test.Person with modifiers "private"
        field.setAccessible(true);
        try {
            System.out.println(field.getName() + ":"+ field.get(person));
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

name:aaa
sex:男
phone:12345566

Field 中 field.get(Object obj) 的源码如下:

/**
 * 返回对象指定field的值
 * @param obj 声明该字段的对象
 */ 
@CallerSensitive
public Object get(Object obj)
    throws IllegalArgumentException, IllegalAccessException {
    if (!override) {
        if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
            Class<?> caller = Reflection.getCallerClass();
            checkAccess(caller, clazz, obj, modifiers);
        }
    }
    return getFieldAccessor(obj).get(obj);
}

  • 2
    点赞
  • 3
    评论
  • 10
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值