BeanUtils.copyProperties和嵌套List

时间:2017-12-08 15:51:22

标签: java spring hibernate

我想将一个对象转换为另一个对象,为此我使用Spring BeanUtils。但是一个属性“foo”&#39;类型Bag<X>(从Hibernate发出)被复制到List<Y>类型的目标对象中没有问题。

使用了相应的setter:setFoo(List<Y> foo),在调试模式下,我看到&#39; foo&#39;属于Bag<X>类型。

编辑:示例

class Foo {
    List<Integer> list = new ArrayList<Integer>() {{add(1);}};

    public List<Integer> getList() {
        return list;
    }

    public void setList(List<Integer> list) {
        this.list = list;
    }
}

class Bar {
    List<Double> list = new ArrayList<Double>() {{add(1.0);}};

    public List<Double> getList() {
        return list;
    }

    public void setList(List<Double> list) {
        this.list = list;
    }
}

然后:

Foo foo = new Foo();
Bar bar = new Bar();
Bar bar2 = new Bar();
org.apache.commons.beanutils.BeanUtils.copyProperties(foo, bar);
org.springframework.beans.BeanUtils.copyProperties(foo, bar2);

结果:bar.getList()是一个Double的列表(无修改),bar2.getList()是一个Integer列表(属性从源复制到目标)。

为什么不抛出ClassCastException? Spring如何设置此属性?

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是因为,正如您在此link

中看到的那样
public class Bag
extends ODMGCollection
implements org.odmg.DBag, List

袋子实施清单。