多个扩展在泛型函数java中

时间:2016-10-14 06:44:10

标签: java generic-programming generic-list

我想实现一个简单的排序函数,它对列表进行排序并返回排序列表(非常简单!)。所以我写了这个

public static <T extends List<? extends Comparable>> T sort(T objects)
{
    Collections.sort(objects);
    return objects;
}

问题是当我尝试对一个简单的列表进行排序时,它会给我这个错误

  

错误:(19,20)错误:找不到合适的排序方法(T#1)   方法Collections.sort(List)不适用   (不能推断类型变量T#2   (参数不匹配; T#1无法转换为List))   方法Collections.sort(List,Comparator)不适用   (不能推断类型变量T#3   (实际和正式的参数列表长度不同))   其中T#1,T#2,T#3是类型变量:   T#1扩展了在方法排序中声明的List(T#1)   T#2扩展了方法排序(List)中声明的Comparable   T#3扩展了在方法排序中声明的Object(List,Comparator)   其中CAP#1是一个新的类型变量:   CAP#1扩展可以捕获?扩展可比较

那么问题是什么?!

提前致谢:)))

1 个答案:

答案 0 :(得分:1)

正如@Bejan George指出的那样,在这种情况下,泛型类型不应该是列表,而是列表中包含的可比元素。

正确的实施方式是:

public static <T extends Comparable> List<T> sort(List<T> objects) {
    Collections.sort(objects);
    return objects; 
}