问题描述
|
我想提取未由某些自定义注释标记的私有字段值,这可以通过BeanUtils吗?如果是,怎么办?
解决方法
是的,假设您知道字段名称。您可以使用
PropertyUtils.getSimpleProperty(...)
。另请参见此处的示例。
,不可以,BeanUtils无法实现。但是您可以使用Java自己的反射工具,如下所示:
public class BeanUtilTest {
public static void main(String[] args) throws ... {
MyBean bean = new MyBean();
Field field = bean.getClass().getDeclaredField(\"bar\");
field.setAccessible(true);
System.out.println(field.get(bean));
}
public static class MyBean {
private final String bar = \"foo\";
}
}
请考虑:使用反射访问私有字段是非常糟糕的样式,仅应在测试或确定没有其他方法的情况下进行。如果您无权更改您尝试访问的类的源,则可能是不得已的选择。但是请考虑一下,这种行为将来可能会发生变化(例如,您正在使用的库的更新)并破坏您的代码。
编辑:如果BeanUtils或PropertyUtils正在工作,则意味着此属性有一个公共获取器,您应该使用它而不是使用反射。在没有公共获取器的私有字段上使用PropertyUtils会引发NoSuchMethodException。