6

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

4

2 回答 2

2

是的,假设您知道字段名称。您可以使用PropertyUtils.getSimpleProperty(...). 另请参阅此处以获取示例。

于 2011-05-25T10:21:02.177 回答
2

不,使用 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。

于 2011-05-25T10:30:34.103 回答