类型转换数组列表



我有一个类,它扩展了一个泛型类型的数组列表:

class ListA extends ArrayList<A>{
}

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

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

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

关于如何做到这一点的任何建议?

将继承自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对象的同步取决于您传递给其构造函数的内容:传递"普通"ArrayList<A>以获得非同步ListA,或传递同步以获得同步ListA

现在,当您从未同步的ListA进行同步时,您的代码片段如下所示:

ListA a = new ListAImpl(new ArrayList<A>());
ListA sync = new ListAImpl(Collections.synchronizedList(a));

Collections.synchronizedList()声明如下

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

换句话说,它返回一个List 。你不知道也不应该知道关于实现类的任何信息。因此,您不能期望它属于 ListA

尽可能编程到接口。

最新更新