我试图使用具有给定名称的反射来查找private
字段,该字段也可能位于父类或继承层次结构中的其他位置。
但我发现Class
中没有提供此信息的方法。
Class#getDeclaredFields()
- 提供所有字段private
,public
但不包含继承层次结构
Class#getFields()
- 包含继承层次结构,但仅搜索public
个字段。
那么为什么没有提供这两种信息的方法呢?
我知道这很容易实现,并且有一些库提供了这个,但仍然可以包含在java本身中。
答案 0 :(得分:0)
这是因为孩子class
不知道父private
中的任何class
字段 - 它不会继承它们。
通过使用getSuperClass
public static Field getField(final Class<?> toReflectOn, final String fieldName) throws NoSuchFieldException {
try {
return toReflectOn.getField(fieldName);
} catch (NoSuchFieldException ex) {
if (toReflectOn.getSuperclass() != null) {
return getField(toReflectOn.getSuperclass(), fieldName);
}
throw ex;
}
}
This其他SO帖子提供了一种更复杂的方法,可以遍历类层次结构中的所有字段。