我有一个扩展泛型类型的Arraylist的类:
class ListA extends ArrayList<A>{
}
现在我创建一个ListA
的对象,然后我想让它成为一个同步列表
ListA a = new ListA();
a = (ListA) Collections.synchronizedList(a);
但是上面的代码给出了类型转换异常。最后我想迭代对象a
并将列表成员存储在不同的同步列表中。
有关如何解决这个问题的任何建议吗?
答案 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}}