我有一个ArrayList,我需要一个值的副本而不是引用。
到目前为止我尝试过:
ArrayList<AudioInputStream> copy = new ArrayList<AudioInputStream>(original);
Collections.copy(copy, original);
我猜这些副本称为浅拷贝,因为AudioInputStream
是Object
。我读到一个简单的深层复制方法是使用构造函数,但我无法在我的案例中弄清楚如何做到这一点。
答案 0 :(得分:0)
当我们谈论使用构造函数的深层复制时,我们必须创建这样的东西:
public class Foo {
public Foo(Foo aFoo) {
//your deep copy here
}
}
然后,很容易在列表上循环并创建新对象。
List<Foo> newList = /* whatever */;
for(Foo foo : fooLists ) {
newList.add(new Foo(foo));
}
然而,AudioInputStream
不允许这样做,此外,克隆InputStream
的事实非常奇怪。
你能从同一个来源创建另一个InputStream
吗?