What is the difference between getFields and getDeclaredFields in Java reflection

前端 未结 4 660
广开言路
广开言路 2020-11-29 17:22

I\'m a little confused about the difference between the getFields method and the getDeclaredFields method when using Java reflection.

I re

4条回答
  •  失恋的感觉
    2020-11-29 17:30

    getFields()

    All the public fields up the entire class hierarchy.

    getDeclaredFields()

    All the fields, regardless of their accessibility but only for the current class, not any base classes that the current class might be inheriting from.

    To get all the fields up the hierarchy, I have written the following function:

    public static Iterable getFieldsUpTo(@Nonnull Class startClass, 
                                       @Nullable Class exclusiveParent) {
    
       List currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
       Class parentClass = startClass.getSuperclass();
    
       if (parentClass != null && 
              (exclusiveParent == null || !(parentClass.equals(exclusiveParent)))) {
         List parentClassFields = 
             (List) getFieldsUpTo(parentClass, exclusiveParent);
         currentClassFields.addAll(parentClassFields);
       }
    
       return currentClassFields;
    }
    

    The exclusiveParent class is provided to prevent the retrieval of fields from Object. It may be null if you DO want the Object fields.

    To clarify, Lists.newArrayList comes from Guava.

    Update

    FYI, the above code is published on GitHub in my LibEx project in ReflectionUtils.

提交回复
热议问题