【问题标题】:how to do beanutils converter for arraylist to double array如何将arraylist的beanutils转换器转换为双数组
【发布时间】:2015-05-20 10:47:43
【问题描述】:

我正在尝试使用 BeanUtils 重构 bean。 BeanUtils.populate(obj,map) 几乎正是我所需要的,除了我认为我需要一个转换器,因为地图中的一个东西是一个数组列表,但 bean 需要一个数组 []。我试图为它写一个转换器,但它没有进入转换方法。调用 populate 会产生带有消息“参数类型不匹配”的 IllegalArgumentException 豆码:

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

【问题讨论】:

    标签: java javabeans apache-commons-beanutils


    【解决方案1】:

    添加包含 Doubles 的 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。重要的是映射键“数据”与 setData 和 getData 方法一致。

    您确定您的地图中有一个数组列表吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-10
      • 2011-09-18
      • 1970-01-01
      • 2015-05-16
      • 2013-04-14
      • 2011-01-09
      • 2010-09-16
      相关资源
      最近更新 更多