Установка индексированного свойства списка с помощью BeanUtils - PullRequest
3 голосов
/ 27 января 2011

Я пытаюсь использовать BeanUtils для взаимодействия с Java-компонентом, подобным следующему:

public class Bean {
    private List<Integer> prices = new LinkedList<Integer>();

    public List<Integer> getPrices() {
        return prices;
    }
}

Согласно документации BeanUtils , BeanUtils поддерживает индексированные свойства, которые List s:

Как расширение спецификации JavaBeans, пакет BeanUtils рассматривает любое свойство, базовый тип данных которого java.util.List (или реализация List), также проиндексировано.

Однако, допустим, я пытаюсь сделать что-то вроде следующего:

Bean bean = new Bean();

// Add nulls to make the list the correct size
bean.getPrices().add(null);
bean.getPrices().add(null);

BeanUtils.setProperty(bean, "prices[0]", 123);
PropertyUtils.setProperty(bean, "prices[1]", 456);

System.out.println("prices[0] = " + BeanUtils.getProperty(bean, "prices[0]"));
System.out.println("prices[1] = " + BeanUtils.getProperty(bean, "prices[1]"));

Вывод:

prices[0] = null
prices[1] = 456

Почему BeanUtils.setProperty() не может установить индексированное свойство, а PropertyUtils.setProperty() может? Разве BeanUtils не поддерживает преобразование типов для объектов внутри List s?

1 Ответ

5 голосов
/ 28 января 2011

BeanUtils требуется метод установки для его работы.В вашем классе Bean отсутствует метод установки для prices, добавьте его и перезапустите код, он должен работать нормально: -

public void setPrices(List<Integer> prices) {
    this.prices = prices;
}
...