利用反射访问和设置类私有域

1. 利用反射访问java类私有变量

setAccessible(Boolean flag)可以跳过java语言的访问检查,使得私有变量可以被查询和设置

isAccessible()可以用来检测Field是否可以被访问

实例代码如下:


package com.yf.ssm.po;


import java.util.Date;


public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public User(Integer id, String username) {
super();
this.id = id;
this.username = username;
}


public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex == null ? null : sex.trim();
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address == null ? null : address.trim();
    }
}


public static void testField() throws Exception, IllegalAccessException{
User user = new User(1,"name");
Class cl = user.getClass();
Field[] fields = cl.getDeclaredFields();
for(Field f: fields){
String name = f.getName();
System.out.println(name);
Boolean isAccessible = f.isAccessible();
System.out.println(isAccessible);
f.setAccessible(true);
isAccessible = f.isAccessible();
System.out.println(isAccessible);
Object obj = f.get(user);
System.out.println(obj);
System.out.println("-------");
}
}

运行结果

id
false
true
1
------
username
false
true
wuyifeng
------
birthday
false
true
null
------
sex
false
true
null
------
address
false
true
null
------

测试表明,可以访问并获取对象的私有成员变量(域 Field)

fob = field.get(Object obj)可以返回对象obj的field域的值(object对象)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值