我想提取未通过某些自定义注释标记的私有字段值,这是否可以通过BeanUtils实现?如果是,怎么样?
答案 0 :(得分:2)
是的,假设您知道字段名称。您可以使用PropertyUtils.getSimpleProperty(...)
。另请参阅here以获取示例。
答案 1 :(得分:1)
不,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正在运行,这意味着此属性有一个公共getter,您应该使用它而不是使用反射。在没有公共getter的私有字段上使用PropertyUtils会抛出NoSuchMethodException。