3

我必须编写一个方法来对整数和双精度数进行排序。

public ArrayList<Number> sortDescending(ArrayList<Number> al){
    Comparator<Number> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public ArrayList<Number> sortAscending(ArrayList<Number> al){
    Collections.sort(al);
    return al;
}

问题是在sortAscending中,出现如下错误:

绑定不匹配:Collections 类型的泛型方法 sort(List) 不适用于参数 (ArrayList)。推断的类型 Number 不是有界参数 < T extends Comparable < ? 超级T>>

4

2 回答 2

9

您需要使用与相交的通用上限NumberComparable<T>

public <T extends Number & Comparable<T>> ArrayList<T> sortDescending(ArrayList<T> al){
    Comparator<T> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}

所有 JDK Numbers(例如FloatInteger等)都匹配此类型。

对于初学者来说,语法<T extends A & B>是你绑定T A的方式B

仅供参考,“或”逻辑没有语法(如果您考虑一下也没有意义)

于 2012-07-16T14:36:02.957 回答
4

您收到错误是因为 number 未实现Comparable<Number>。您需要添加一个通用约束,以便它扩展 number 和 Comparable。在这种情况下:

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}
于 2012-07-16T14:35:47.843 回答