我想使用包含该类指定类型元素的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)
}
}
为什么我无法将e
添加到list
?由于T绝对扩展了Comparable,我想我可以将e
添加到list
。
答案 0 :(得分:2)
假设您有一个类Teacher
和一个类Student
,它们都实现了Comparable
。现在,如果您创建Foo<Teacher>
,则此foo对象将包含教师列表ArrayList<Teacher>
。如果你的代码会编译,你现在可以添加一个学生(因为它可以比较)给老师名单,当然这是不允许的。
您可能真的想要:
@Override
public void add(T e) {
list.add(e);
}
答案 1 :(得分:1)
由于所有T
都是Comparable
,但并非所有Comparables
都是T
,因此您无法将Comparable
添加到T
列表中}。
你可以通过ArrayList<Comparable<T>>
来实现
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);
}
}