集合排序泛型类型java

时间:2016-03-25 21:35:38

标签: java generics collections comparable

我一直在寻找问题的答案。我发现了大量相似的主题,但我仍然不知道该怎么做。

我有一个类,我想在排序的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>”。

2 个答案:

答案 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>>参数。