Java 重用泛型类型T扩展特定类
我想使用一个Java 重用泛型类型T扩展特定类,java,generics,Java,Generics,我想使用一个ArrayList,它包含类指定类型的元素 public class Foo<T extends Comparable<T>> extends AbstractFoo { private ArrayList<T> list = new ArrayList<T>(); @Override public void add(Comparable e) { list.add(e); // The m
ArrayList
,它包含类指定类型的元素
public class Foo<T extends Comparable<T>> extends AbstractFoo {
private ArrayList<T> list = new ArrayList<T>();
@Override
public void add(Comparable e) {
list.add(e); // The method add(T) in the type ArrayList<T> is not applicable for the arguments (Comparable)
}
}
公共类Foo扩展了AbstractFoo{
private ArrayList list=new ArrayList();
@凌驾
公共空间添加(可比e){
list.add(e);//类型ArrayList中的方法add(T)不适用于参数(Compariable)
}
}
为什么我不能将
e
添加到列表中
?由于T扩展了Comparable,我想我可以将e
添加到列表中
让我们假设您有一个类教师
和一个类学生
,这两个类都实现了Comparable
。现在,如果您创建一个Foo
,这个Foo对象将包含一个教师列表ArrayList
。如果您的代码可以编译,您现在可以将一个学生(因为它是可比较的)添加到教师列表中,这当然是不允许的
实际上,您可能想要:
@Override
public void add(T e) {
list.add(e);
}
由于所有
T
s都是可比的
,但并非所有可比的
都是T
s,因此不能将可比的
添加到T
列表中
不过,您可以通过使用ArrayList
来实现这一点
public class Foo<T extends Comparable<T>> extends AbstractFoo {
private ArrayList<Comparable<T>> list = new ArrayList<>();
@Override
public void add(Comparable e) {
list.add(e);
}
}
公共类Foo扩展了AbstractFoo{
private ArrayList list=new ArrayList();
@凌驾
公共空间添加(可比e){
列表.添加(e);
}
}
这只起作用,因为Comparable
是原始类型。在这种情况下,add方法会污染列表
,使其具有任意可比性。True。最好将方法参数更改为Comparable e
。但我觉得这可能超出了这个问题的范围