2015-05-20 1 views
0

Я пытаюсь восстановить компонент, используя BeanUtils. BeanUtils.populate (obj, map) - это почти то, что мне нужно, но я думаю, что мне нужен конвертер, поскольку одна из вещей на карте - это arraylist, но bean-файл нуждается в массиве []. Я попытался написать для него конвертер, но он не переходит в метод преобразования. Вызов Заполнить дает IllegalArgumentException с сообщением 'аргумент типа рассогласования' Bean код:Как сделать beanutils конвертер для arraylist в двойной массив

public class TestObject implements Serializable 
{ 
    private double[] data; 

    public double[] getData() { 
     return data; 
    } 
    public void setData(double[] data) { 
     this.data = data; 
    } 
} 

Применение Код:

public static void main(String[] args) 
{ 
    ConvertUtils.register(new DoubleArrayConverter(), double[].class); 
    Map<String, Object> result = getMap(); 
    Class<?> clazz = Class.forName("com.test.TestObject"); 
    Object obj = clazz.newInstance(); 
    BeanUtils.populate(obj, result); 
} 

Преобразователь код:

public class DoubleArrayConverter implements Converter 
{ 
    //takes in an arraylist and returns a double[] 
    public Object convert(Class arg0, Object arg1) 
    { 
     ArrayList list = (ArrayList)arg1; 
     double[] data = Doubles.toArray(list); 

     return data; 
    } 
} 

ответ

0

После добавления библиотеки Google, которая включает в себя парный

import com.google.common.primitives.Doubles; 

и установить некоторые значения в карте

Map<String, Object> result = new HashMap<String, Object>(); 
    List<Double> listDouble = new ArrayList<Double>(); 
    listDouble.add(123.45); 
    listDouble.add(678.90); 
    result.put("data", listDouble); 

я был в состоянии запустить свой код и заполнить боб. Важно, чтобы данные ключа карты соответствовали методам setData и getData.

Вы уверены, что ваша Карта имеет список массивов?