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<Field> getFieldsUpTo(@Nonnull Class<?> startClass,
@Nullable Class<?> exclusiveParent) {
List<Field> currentClassFields = Lists.newArrayList(startClass.getDeclaredFields());
Class<?> parentClass = startClass.getSuperclass();
if (parentClass != null &&
(exclusiveParent == null || !(parentClass.equals(exclusiveParent)))) {
List<Field> parentClassFields =
(List<Field>) 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.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…