来自Javadoc的Class.getField(...)
:
返回一个反映此 Class 对象表示的类或接口的指定公共成员字段的 Field 对象。name 参数是一个字符串,指定所需字段的简单名称。要反射的场由下面的算法确定。设 C 为该对象所代表的类:
如果 C 声明了一个具有指定名称的公共字段,那就是要反映的字段。如果在上面的步骤 1 中没有找到任何字段,则该算法递归地应用于 C 的每个直接超接口。直接超接口按照它们被声明的顺序进行搜索。如果在上面的步骤 1 和 2 中没有找到字段,并且 C 有一个超类 S,则在 S 上递归调用此算法。如果 C 没有超类,则抛出 NoSuchFieldException。请参阅 Java 语言规范,第 8.2 和 8.3 节。
如果您尝试通过以下方式检索的字段:
studyplanCategory.getClass().getField(filterProperty)
是私人的,那么你会得到一个NoSuchFieldException
. 对于私有字段,请尝试以下操作:
studyplanCategory.getClass().getDeclaredField(filterProperty)
并以这种方式通过字段设置值时绕过潜在的非法访问异常:
Field field = studyplanCategory.getClass().getDeclaredField(filterProperty);
field.setAccessible(true);
field.get(studyplanCategory);