如何为arraylist做双层数组的beanutils转换器

时间:2015-05-20 10:47:43

标签: java javabeans apache-commons-beanutils

我正在尝试使用BeanUtils重建bean。 BeanUtils.populate(obj,map)几乎正是我所需要的,除了我认为我需要一个转换器,因为地图中的一个东西是一个arraylist但是bean需要一个数组[]。我曾尝试为它编写转换器,但它没有进入转换方法。调用populate会给IllegalArgumentException带来消息'参数类型不匹配' Bean代码:

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

1 个答案:

答案 0 :(得分: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);

我能够运行你的代码并填充bean。重要的是映射键'data'与setData和getData方法一致。

你确定你的Map中有一个数组列表吗?