拍摄Arraylist

时间:2014-02-17 04:09:49

标签: java list generics synchronized

我有一个扩展泛型类型的Arraylist的类:

class ListA extends ArrayList<A>{

}

现在我创建一个ListA的对象,然后我想让它成为一个同步列表

ListA a = new ListA();
a = (ListA) Collections.synchronizedList(a);

但是上面的代码给出了类型转换异常。最后我想迭代对象a并将列表成员存储在不同的同步列表中。

有关如何解决这个问题的任何建议吗?

2 个答案:

答案 0 :(得分:2)

Collections.synchronizedList()声明如下

public static <T> List<T> synchronizedList(List<T> list) {

换句话说,它会返回List。您不应该也不应该对实现类有任何了解。因此,您不能指望它是ListA类型。

Program to interfaces,只要你能。

答案 1 :(得分:2)

将继承自ArrayList<A>的类替换为包含列表的接口和类

interface ListA extends List<A> {
    // Put additional methods here
}
class ListAImpl implements ListA {
    private List<A> content;
    public ListAImpl(List<A> content) {
        this.content = content;
    }
    // Use delegation for all methods of the List<A> interface, calling through
    // to the content list.
}

现在,ListA对象的同步取决于您传递给构造函数的内容:传递“plain”ArrayList<A>以获得非同步ListA,或传递同步的ListA同步ListA

现在,您从非同步的ListA a = new ListAImpl(new ArrayList<A>()); ListA sync = new ListAImpl(Collections.synchronizedList(a)); 进行同步{{1}}时的代码段:

{{1}}