我有一个类,它扩展了一个泛型类型的数组列表:
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
型
尽可能编程到接口。