2015-05-20 52 views
0

我正在嘗試使用BeanUtils重建一個bean。 BeanUtils.populate(obj,map)幾乎就是我所需要的,除非我認爲我需要一個轉換器,因爲映射中的其中一個東西是arraylist,但是這個bean需要一個數組[]。我試圖爲它編寫一個轉換器,但它沒有進入轉換方法。調用填入給拋出:IllegalArgumentException與消息 '參數類型不匹配' 豆代碼:如何將Arrayutils轉換器用於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

加入谷歌庫,其中包括雙打後

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); 

我能運行代碼並填充豆。 map key'data'與setData和getData方法一致是很重要的。

你確定你的地圖裏有一個數組列表嗎?