Java 类型转换阵列列表
我有一个扩展泛型类型Arraylist的类:Java 类型转换阵列列表,java,list,generics,synchronized,Java,List,Generics,Synchronized,我有一个扩展泛型类型Arraylist的类: class ListA extends ArrayList<A>{ } 但上面的代码给出了类型转换异常。我最不想迭代对象a并将列表成员存储在不同的同步列表中 关于如何进行此操作有何建议?集合。synchronizedList()声明如下 public static <T> List<T> synchronizedList(List<T> list) { 公共静态列表同步列表(列表列表){ 换句话
class ListA extends ArrayList<A>{
}
但上面的代码给出了类型转换异常。我最不想迭代对象a
并将列表成员存储在不同的同步列表中
关于如何进行此操作有何建议?
集合。synchronizedList()
声明如下
public static <T> List<T> synchronizedList(List<T> list) {
公共静态列表同步列表(列表列表){
换句话说,它返回一个列表
。您不知道也不应该知道关于实现类的任何信息。因此,您不能期望它属于ListA
类型
只要有可能。将继承自
ArrayList
的类替换为包含以下列表的接口和类:
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.
}
为什么你需要
a
成为ListA
而不是List
?可能是@PaulBellora的副本:@PaulBellora是我的项目中到处使用的一个遗留类,我想坚持使用同一个类。那才是真正的问题。你应该这样做。我想你是指新的ListAImpl
,尽管我不明白嵌套的列表的意义A
@SotiriosDelimanolis Yes-我在代码中添加了一条注释,以表明发生了什么。谢谢!
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 a = new ListAImpl(new ArrayList<A>());
ListA sync = new ListAImpl(Collections.synchronizedList(a));