繁体   English   中英

泛型-集合排序方法

[英]Generics - Collections sort method

当使用具有List<Employee> Collections.sort(List<T> list) ,其中Employee是一个不扩展Comparable接口的类。

然后我看到以下编译错误

类型Collections的方法sort(List<T>)不适用于参数( List<Employee> )。

我不明白为什么T应该实现Comparable ,在sort方法的方法参数中的任何地方都没有指定T

更新:请停止投票。 我一直认为只有方法参数才能确定要作为参数传递的内容,但是我看到<T extends Comparable<? super T>> 方法签名中的<T extends Comparable<? super T>> ,但我在任何方法签名中都看不到。 访问修饰符,是否为静态,返回类型,方法名称对我来说是已知的,但是额外的一个是什么?

更新:我不知道这一点:“所有通用方法声明的类型参数部分均由方法返回类型之前的尖括号(<和>)分隔”

这是完整的签名:

public static <T extends Comparable<? super T>> void sort(List<T> list)

如您所见, T必须实现Comparable否则sort()如何知道如何对List<T>进行排序

public static <T extends Comparable<? super T>> void sort(List<T> list) 

如果您不知道哪个雇员比另一个雇员大,就无法排序。 只需添加自定义比较器即可。

对于原始数据类型(例如int,long,float等),预定义了比较。 排序采用预定义的比较措施并对变量进行排序。

但是,当您创建一个类时,一个类可以由许多不同的原始类型甚至其他对象组成。 Java无法自动知道如何进行比较,因此它需要扩展可比较的接口并定义用于指定排序方式的函数。 例如

Class car {
int id; 
String name;
String company;
}

实施可比性后,您可以定义您的排序是否取决于汽车的ID,其名称或公司名称。 希望这可以消除需求。

对于泛型,有两种方法:1.通配符和2.Bounded类型参数。

通配符示例: public void sort(List<? extends T> list)

有界类型的示例: public static <T extends Comparable<? super T>> void sort(List<T> list) public static <T extends Comparable<? super T>> void sort(List<T> list)

像上面的示例一样,当需要多次使用`T时,最好使用有界类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM