我一直在寻找问题的答案。我发现了大量相似的主题,但我仍然不知道该怎么做。
我有一个类,我想在排序的ArrayList中存储对象。
例如,我创建了这个类:
public class Kwadrat implements Comparable<Kwadrat> {
private int a;
public Kwadrat(int a){
this.a = a;
}
public int get_size(){
return a*a;
}
public int compareTo(Kwadrat b){
if(b.get_size() > get_size()){
return -1;
}
if(b.get_size() < get_size()){
return 1;
}
return 0;
}
}
这是我的Sort
课程:
public class Sort <T> {
ArrayList<T> arraylist;
public Sort(){
arraylist = new ArrayList<T>();
}
public void add(T element){
arraylist.add(element);
Collections.sort(arraylist);
}
}
Collections.sort(arraylist);
仍然告诉我“没有类型变量T
的实例存在,因此T conforms to Comparable<? super T>
”。
答案 0 :(得分:6)
您的Sort
类目前对其类型参数T
没有界限,因此它可以是任何类型,即使是不是Comparable
的类型。它会接受Object
,而不是Comparable
。因为没有边界,并且因为编译器发现可以传递给单arg Collections.sort
method的边界,所以存在编译器错误。
您应该在T
期望的Collections.sort
上创建相同的边界。
public class Sort <T extends Comparable<T>> {
甚至更好:
public class Sort <T extends Comparable<? super T>> {
答案 1 :(得分:3)
将T
更改为T extends Comparable<T>
行中的public class Sort <T> {
,因为该方法需要<T extends Comparable<? super T>>
参数。