反射setAccessible()方法

java代码中,常常将一个类的成员变量置为private

在类的外面获取此类的私有成员变量的value时,需要注意:

测试类:

Java代码
  1. publicclassAccessibleTest{
  2. privateintid;
  3. privateStringname;
  4. publicAccessibleTest(){
  5. }
  6. publicintgetId(){
  7. returnid;
  8. }
  9. publicvoidsetId(intid){
  10. this.id=id;
  11. }
  12. publicStringgetName(){
  13. returnname;
  14. }
  15. publicvoidsetName(Stringname){
  16. this.name=name;
  17. }
  18. }

Main类:

Java代码
  1. publicclassMain{
  2. publicstaticvoidmain(String[]args)throwsException{
  3. Classclazz=Class.forName("com.test.accessible.AccessibleTest");
  4. AccessibleTestat=newAccessibleTest();
  5. at.setId(1);
  6. at.setName("AT");
  7. for(Fieldf:clazz.getDeclaredFields()){
  8. f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作
  9. System.out.println(f.get(at));//获取当前对象中当前Field的value
  10. }
  11. }
  12. }

如果没有在获取Field之前调用setAccessible(true)方法,异常:

Java代码
  1. java.lang.IllegalAccessException:
  2. Classcom.test.accessible.Main
  3. cannotaccess
  4. amemberofclasscom.test.accessible.AccessibleTest
  5. withmodifiers"private"

当然在AccessibleTest类的内部(AccessibleTest的内部类除外)

进行如上操作则不需要调用setAccesible()方法

java代码中,常常将一个类的成员变量置为private

在类的外面获取此类的私有成员变量的value时,需要注意:

测试类:

Java代码
  1. publicclassAccessibleTest{
  2. privateintid;
  3. privateStringname;
  4. publicAccessibleTest(){
  5. }
  6. publicintgetId(){
  7. returnid;
  8. }
  9. publicvoidsetId(intid){
  10. this.id=id;
  11. }
  12. publicStringgetName(){
  13. returnname;
  14. }
  15. publicvoidsetName(Stringname){
  16. this.name=name;
  17. }
  18. }

Main类:

Java代码
  1. publicclassMain{
  2. publicstaticvoidmain(String[]args)throwsException{
  3. Classclazz=Class.forName("com.test.accessible.AccessibleTest");
  4. AccessibleTestat=newAccessibleTest();
  5. at.setId(1);
  6. at.setName("AT");
  7. for(Fieldf:clazz.getDeclaredFields()){
  8. f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作
  9. System.out.println(f.get(at));//获取当前对象中当前Field的value
  10. }
  11. }
  12. }

如果没有在获取Field之前调用setAccessible(true)方法,异常:

Java代码
  1. java.lang.IllegalAccessException:
  2. Classcom.test.accessible.Main
  3. cannotaccess
  4. amemberofclasscom.test.accessible.AccessibleTest
  5. withmodifiers"private"

当然在AccessibleTest类的内部(AccessibleTest的内部类除外)

进行如上操作则不需要调用setAccesible()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值