这是课堂作业的一部分,我无法弄清楚这句话对拯救自己生命的意义。
public static <T extends Comparable<? super T>> void sort(Arraylist<T> list){}
该方法没有实现,因为我应该自己这样做。要排序的列表将包含Integer
类型,Double
类型和String
类型。
我该如何使用Comparable
排序不同对象类型的列表以及Comparable<? super T>
到底是什么意思?
我的班级课本非常模糊和深奥,这句话非常具体,我不知道在互联网上哪里可以找到它。
修改
好吧,我终于理解了指令=(我不必排序不同项目类型的列表。我应该排序相同项目类型的三个不同列表。但我仍然不明白
Comparable<? super T>
答案 0 :(得分:2)
因此,如果我理解正确,您可以为通用排序方法创建实现。
如果你打电话给&#39;排序&#39;使用充满字符串的arraylist的方法,该方法将对这些字符串进行排序:
public static <String> void sort(Arraylist<String> list){}
如果使用充满长值的arraylist调用相同的方法,它将对长值进行排序:
public static <Long> void sort(Arraylist<Long> list){}
你不打算用long来排序字符串。
另一种通用方法的示例可以是:
public static <T> void print(T object){
System.out.println(object.toString());
}
public static <T extends Comparable<? super T>> void sort(Arraylist<T> list){}
更新
您想要一个扩展T
的泛型类型<T extends Comparable<>
Comparable还需要一个泛型类型,它是您的第一个泛型类型的超类。
<? super T>
答案 1 :(得分:2)
您获得的列表只包含一种T
类型,并且您知道T
它是Comparable<? super T>
的子类型。
所以,如果您的子类型为Comparable<T>
,那么事情就会非常简单:您知道您的类型有一个compareTo(T t)
方法可用于排序。
但想象一下,java.sql.Timestamp
类型为T
。它不会实现Comparable<Timestamp>
,而是Comparable<Date>
。所以它有一个方法compareTo(Date)
。但是,这不是问题,因为Timestamp
是Date
,所以您仍然可以使用该方法来比较两个{{1} }}秒。但签名中Timestamp
不允许传递Comparable<T>
,但限制性太强。
这正是给定签名不仅允许ArrayList<Timestamp>
的子类而且允许Comparable<T>
的子类作为列表元素的原因。这包括Comparable<? super T>
示例之类的情况,因为超类型的比较函数足以满足您的需要。
如果您想了解有关此想法的更多信息,请搜索“对比差异”。