2011-01-27 1 views
3

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

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

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

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

в качестве расширения спецификации JavaBeans, пакет BeanUtils рассматривает любое свойство, лежащий в основе данных, тип java.util.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() может ? Does BeanUtils не поддерживает преобразование типов для объектов внутри List s?

ответ

5

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

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

Спасибо, что делает его работу. Однако, перейдя через фактический источник BeanUtils, я заметил, что на самом деле он не использует метод setPrices() для изменения содержимого списка цен - он просто использует метод getPrices() и напрямую изменяет список. –