关于java:什么是<?

What is <? super T> syntax?

本问题已经有最佳答案,请猛点这里访问。

我无法理解以下语法:

1
public class SortedList< T extends Comparable< ? super T> > extends LinkedList< T >

我看到类排序列表扩展了LinkedList。我只是不知道

1
T extends Comparable< ? super T>

手段。

到目前为止,我对它的理解是,类型t必须是实现可比性的类型……但是,什么是< ? super T >


泛型中的super与extends相反。不是说Comparable的泛型类型必须是t的子类,而是说它必须是t的超类。区别很重要,因为扩展告诉你可以从类中得到什么(至少你会得到这个,也许是子类)。super告诉你可以把什么放到类中(最多这个,可能是超类)。

在这种特定的情况下,它所说的是类型必须实现其自身或其超类的可比性。所以考虑java.util.date。执行Comparable。但是java.sql.date呢?它还实现了Comparable

如果没有超级签名,SortedList将无法接受java.sql.date的类型,因为它不实现与自身类似的类型,而是实现自身的超级类。