使用BeanUtils检索字段值

时间:2011-05-25 09:45:24

标签: java apache-commons-beanutils

我想提取未通过某些自定义注释标记的私有字段值,这是否可以通过BeanUtils实现?如果是,怎么样?

2 个答案:

答案 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。