Получить значения полей, используя BeanUtils - PullRequest
4 голосов
/ 25 мая 2011

Я хочу извлечь значения закрытых полей, которые не отмечены определенной пользовательской аннотацией, возможно ли это через BeanUtils? Если да, то как?

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Да, при условии, что вы знаете имена полей.Вы можете использовать PropertyUtils.getSimpleProperty(...).См. Также здесь для примера.

1 голос
/ 25 мая 2011

Нет, это невозможно с 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.

...