setAccessible()方法
在java代码中,我们经常使用private来控制类中成员变量的访问权限,在类的外边我们一般使用get方法获取私有成员变量的值,但是如果类中没有get方法,但我们又想获取该类私有成员变量的值,该怎么办?
- 可以使用反射获取类中成员变量
- 再使用 accessible() 来临时改变访问权限,就可以获取私有成员变量的值了
测试类
package com.ljw.accessible;
public class AccessibleDemo {
private int id;
private String name;
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
测试
package com.ljw.accessible;
import java.lang.reflect.Field;
public class Test {
@org.junit.Test
public void accessibleTest() throws ClassNotFoundException, IllegalAccessException {
Class clazz = Class.forName("com.ljw.accessible.AccessibleDemo");
AccessibleDemo ad = new AccessibleDemo();
ad.setId(2);
ad.setName("AI");
for(Field f : clazz.getDeclaredFields()){
System.out.println("---------------------------");
System.out.println(f.isAccessible()); // 查看该字段的访问权限,不能访问返回false
f.setAccessible(true); // 将该字段的访问权限改为true
System.out.println(f.isAccessible());
System.out.println(f.getName()+":"+f.get(ad));));
}
}
}
结果:
---------------------------
false
true
id:2
---------------------------
false
true
name:AI
setAccessible()方法的更多相关文章
- Java setAccessible方法作用
在Java中可以通过反射进行获取实体类中的字段值,当未设置Field的setAccessible方法为true时,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常 ...
- 反射setAccessible()方法
java代码中,常常将一个类的成员变量置为private 在类的外面获取此类的私有成员变量的value时,需要注意: 测试类: public class AccessibleTest { privat ...
- Field.setAccessible()方法
http://blog.csdn.net/kjfcpua/article/details/8496911 java代码中,常常将一个类的成员变量置为private 在类的外面获取此类的私有成员变量的v ...
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...
- 反射中setAccessible()方法
调用私有变量域的时候要用setAccessible https://blog.csdn.net/kjfcpua/article/details/8496911
- Java 反射 调用私有域和方法(setAccessible)
Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ...
- JAVA深入研究——Method的Invoke方法。
在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用父类的对象也会报错,虽然这是很符合多态的现象,也符合java的动态绑定规范,但还是想弄懂java ...
- atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug
atitit.java给属性赋值方法总结and BeanUtils 1.6.1 .copyProperty的bug 1. core.setProperty(o, "materialId&qu ...
- JAVA深入研究——Method的Invoke方法
http://www.cnblogs.com/onlywujun/p/3519037.html 在写代码的时候,发现Method可以调用子类的对象,但子类即使是改写了的Method,方法名一样,去调用 ...
随机推荐
- Python 爬虫从入门到进阶之路(十)
之前的文章我们介绍了一下 Python 中正则表达式和 re 模块来做一个案例,爬取<糗事百科>的糗事并存储到本地.本章我们来看一下另一种爬取数据的方式 XPath. 我们在前面爬取< ...
- Windows系统调用中的现场保存
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的现场保存 我们之前介绍过三环进零环的步骤 ...
- Vue-CLI项目vuex仓库
0901自我总结 Vue-CLI项目vuex仓库 一.概念 vuex仓库是vue全局的数据仓库,好比一个单例,在任何组件中通过this.$store来共享这个仓库中的数据,完成跨组件间的信息交互. v ...
- unittest中HTMLTestRunner模块生成
unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner 一.导入HTMLTestRunner 方法1.这个模块下载不能通过pip安装了,只能下载后手动 ...
- [CF544] D. Destroying Roads
D. Destroying Roads time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- opencv::直方图计算
直方图概念 上述直方图概念是基于图像像素值,其实对图像梯度.每个像素的角度.等一切图像的属性值,我们都可以建立直方图. 这个才是直方图的概念真正意义,不过是基于图像像素灰度直方图是最常见 ...
- std::shared_future/future
std::future提供了一种访问异步操作结果的机制.
- Grid实现table表格布局
HTML <div class="table"> <div class="th"> <div>日期</div> ...
- 2.单核CPU是如何实现多进程的?
单核cpu之所以能够实现多进程,主要是依靠于操作系统的进程的调度算法 如时间片轮转算法,在早期,举例说明:有5个正在运行的程序(即5个进程) : QQ 微信 有道词典 网易云 ...
- java web项目下的lib和build path 中jar包问题解惑
一.build path&WEB-INFO/lib介绍 build path:可以说是引用: WEB-INFO/lib:可以说是固定在一个地方: eclipse编译项目的时候是根据build ...