zoukankan      html  css  js  c++  java
  • Java反射中getDeclaredField和getField的区别

    getDeclaredField是可以获取一个类的所有字段. 
    getField只能获取类的public 字段. 

    public Field getDeclaredField(String name)  
           throws NoSuchFieldException, SecurityException {  
           checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader());  
           Field field = searchFields(privateGetDeclaredFields(false), name);  
           if (field == null) {  
               throw new NoSuchFieldException(name);  
           }  
           return field;  
       }  
      
      
    rivate Field getField0(String name) throws NoSuchFieldException {  
           Field res = null;  
           // Search declared public fields  
           if ((res = searchFields(privateGetDeclaredFields(true), name)) != null) {  
               return res;
        }  
    

      

    getField其实调用的是getField0. 
    他们最后都调用了searchFields. 
    不过getDeclaredField传入的是privateGetDeclaredFields(false), 
    getField传入的是privateGetDeclaredFields(true);

    private Field[] privateGetDeclaredFields(boolean publicOnly) {  
           checkInitted();  
           Field[] res = null;  
           if (useCaches) {  
               clearCachesOnClassRedefinition();  
               if (publicOnly) {  
                   if (declaredPublicFields != null) {  
                       res = (Field[]) declaredPublicFields.get();  
                   }  
               } else {  
                   if (declaredFields != null) {  
                       res = (Field[]) declaredFields.get();  
                   }  
               } 
    

      

    可以看到传入条件为true的时候使用的是declaredPublicFields,意思是public字段 
    为false的时候使用的是declaredFields.

     当然declaredFields和declaredPublicFields最终的来源是:

    private native Field[] getDeclaredFields0(boolean publicOnly);  
    

      

  • 相关阅读:
    常见的HTTP状态码(HTTP Status Code)说明
    eclipse tomcat maven热部署
    log4j.properties 详解与配置步骤
    js玩命加载……
    git学习
    vim学习笔记
    Android中在不同activity中进行自定义广播的解析
    Android中本地广播的实现
    Android中自定义广播的实现
    Android中获得网络状况的实现
  • 原文地址:https://www.cnblogs.com/EdinburghOne/p/9292859.html
Copyright © 2011-2022 走看看