数据库通过反射赋值

setAccessible 并不是在Field中的,而是在AccessibleObject中。

下面是AccessibleObject的解释:

意思是 AccessibleObject 类是 Field Method Constructor 类的基类。它提供反射对象绕过Java语言权限控制检查的权限。

当Fields Methods Constructors被用来set get 对象域,调用方法或者产生初始化对象实例的时候会践行权限检查(public default(package) protected private)。

将反射对象中的 accessible 标志位设置为 true,就意味着允许客户端拥有超级权限,比如Java对象序列化 或者 其他持久化机制等通常禁止的机制。

所以我们在accessible 标志位设置为true 的时候需要非常谨慎,这会带来一定的安全隐患。意思就是改方式是用来设置获取权限的。

如果 accessible 标志被设置为true,那么反射对象在使用的时候,不会去检查Java语言权限控制(private之类的);

如果设置为false,反射对象在使用的时候,会检查Java语言权限控制。

需要注意的是,设置为true会引起安全隐患。

field.setAccessible(true); 方法的解释。

意思就是改方式是用来设置获取权限的。

如果 accessible 标志被设置为true,那么反射对象在使用的时候,不会去检查Java语言权限控制(private之类的);

如果设置为false,反射对象在使用的时候,会检查Java语言权限控制。

需要注意的是,设置为true会引起安全隐患。

Java Field.set()向对象的这个Field属性设置新值value

定义
set(Object obj, Object value)
将指定对象变量上此 Field 对象表示的字段设置为指定的新值.

//根据属性名设置它的值
A a = new A();
Field field = a.getClass().getDeclaredField(“x”);
field.setAccessible(true);
field.set(a, 1);
例子
获取属性的属性值并修改属性值

public static void main(String[] args) throws NoSuchFieldException,
SecurityException,
IllegalArgumentException,
IllegalAccessException {
Person person = new Person();
person.setName(“VipMao”);
person.setAge(24);
person.setSex(“男”);
//通过Class.getDeclaredField(String name)获取类或接口的指定属性值。
Field f1 = person.getClass().getDeclaredField(“name”);
System.out.println("-----Class.getDeclaredField(String name)用法-------");
System.out.println(f1.get(person));
System.out.println("-----Class.getDeclaredFields()用法-------");
//通过Class.getDeclaredFields()获取类或接口的指定属性值。
Field[] f2 = person.getClass().getDeclaredFields();
for (Field field: f2) {
field.setAccessible(true);
System.out.println(field.get(person));
}
//修改属性值
System.out.println("----修改name属性------");
f1.set(person, “Maoge”);
//修改后再遍历各属性的值
Field[] f3 = person.getClass().getDeclaredFields();
for (Field fields: f3) {
fields.setAccessible(true);
System.out.println(fields.get(person));
}
}
执行结果:

-----Class.getDeclaredField(String name)用法-------
VipMao
-----遍历属性值-------
VipMao
24

----修改name属性后再遍历属性值------
Maoge
24

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值