关于赋值的问题
问题描述:
如果是property标签,底层就是使用反射机制调用setter方法进行赋值。我记得前面有个地方老师说过,有一种情况不是调用setter方法,而是直接通过反射获得属性,然后把属性的访问范围改成public,进行直接赋值,然后再把范围改回private。哪一种情况会这样赋值呢?
(谢谢老师)
9
收起
正在回答
1回答
同学你好,同学可以参考下方代码,使用到setAccessible方法打破封装,将原本的private修饰符通过反射修改为public。这个方法的参数如果是true,表示将权限修改为public,如果是false则表示修改为private。
package com.imooc.test;
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) throws Exception {
//获取类对象
Class<Teacher> c = Teacher.class;
//获取私有属性
Field f = c.getDeclaredField("name");
//将访问权限进行修改
f.setAccessible(true);
//获取属性的值
Object o = f.get(c.newInstance());
//输出属性
System.out.println(o);
}
}
class Teacher{
private String name = "imooc";
}祝学习愉快!
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星