zoukankan      html  css  js  c++  java
  • 反射setAccessible()方法

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

     

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

     

    测试类:

    Java代码  收藏代码
    1. public class AccessibleTest {  
    2.   
    3.     private int id;  
    4.     private String name;  
    5.   
    6.     public AccessibleTest() {  
    7.   
    8.     }  
    9.   
    10.     public int getId() {  
    11.         return id;  
    12.     }  
    13.   
    14.     public void setId(int id) {  
    15.         this.id = id;  
    16.     }  
    17.   
    18.     public String getName() {  
    19.         return name;  
    20.     }  
    21.   
    22.     public void setName(String name) {  
    23.         this.name = name;  
    24.     }  
    25.   
    26. }  

     

    Main类:

    Java代码  收藏代码
    1. public class Main {  
    2.   
    3.     public static void main(String[] args) throws Exception {  
    4.         Class clazz = Class.forName("com.test.accessible.AccessibleTest");  
    5.         AccessibleTest at = new AccessibleTest();  
    6.         at.setId(1);  
    7.         at.setName("AT");  
    8.         for (Field f : clazz.getDeclaredFields()) {  
    9.             f.setAccessible(true);//AccessibleTest类中的成员变量为private,故必须进行此操作  
    10.             System.out.println(f.get(at));//获取当前对象中当前Field的value  
    11.         }  
    12.   
    13.     }  
    14.   
    15. }  

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

    Java代码  收藏代码
    1.  java.lang.IllegalAccessException:  
    2. Class com.test.accessible.Main   
    3. can not access   
    4. a member of class com.test.accessible.AccessibleTest  
    5. with modifiers "private"  
     

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

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

  • 相关阅读:
    _purecall函数
    RaiseFailFastException函数
    windows系统的快速失败机制---fastfail
    悲伤的 C++ throw(…)
    STATUS_STACK_BUFFER_OVERRUN不一定是栈缓冲区溢出
    Windows是如何将64位Ntdll映射到32位进程的---转自简书
    学会springboot多环境配置方案不用5分钟
    优雅的使用springboot集成任务调度
    springboot-使用OpenAPI之后我再也没有写过接口文档
    我是如何做到springboot自动配置原理解析
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/8615562.html
Copyright © 2011-2022 走看看