我无法理解以下语法:
public class SortedList< T extends Comparable< ? super T> > extends LinkedList< T >
Run Code Online (Sandbox Code Playgroud)
我看到类SortedList扩展了LinkedList.我只是不知道是什么
T extends Comparable< ? super T>
Run Code Online (Sandbox Code Playgroud)
手段.
到目前为止我对它的理解是类型T必须是一个实现Comparable的类型......但是它是什么< ? super T >?
Yis*_*hai 98
泛型中的超级是扩展的反面.而不是说可比较的泛型类型必须是T的子类,它说它必须是T的超类.区别很重要因为extends告诉你你可以从一个类中获得什么(你得到的至少是这个,也许是一个子类).super告诉你你可以把什么放进课堂(最多这个,也许是一个超类).
在这个特定的情况下,它所说的是该类型必须实现其自身或其超类的可比性.所以考虑java.util.Date.它实现了Comparable<Date>.但是java.sql.Date怎么样?它也实现Comparable<java.util.Date>了.
如果没有超级签名,SortedList将无法接受java.sql.Date的类型,因为它不实现自身的Comparable,而是实现自身的超类.
pol*_*nts 84
这是一个较低限度的通配符.
通配符在需要仅部分了解类型参数的情况下非常有用.[...]上限由语法表示:
Run Code Online (Sandbox Code Playgroud)? extends B
B上限在哪里.[...]允许使用以下语法在通配符上声明下限:Run Code Online (Sandbox Code Playgroud)? super B哪里
B是下限.
甲List<? super Integer>,例如,包括List<Integer>,List<Number>,和List<Object>.
通配符用于使泛型更强大和灵活; 边界用于维护类型安全.
至于它是如何有用的<T extends Comparable<? super T>>,那就是你有类似的东西Cat extends Animal implements Comparable<Animal>.
看看签名 Collections.sort
public static <T extends Comparable<? super T>> void sort(List<T> list)
Run Code Online (Sandbox Code Playgroud)
因此,有了List<Cat> listOfCat,你现在可以Collections.sort(listOfCat).
如果它被宣布如下:
public static <T extends Comparable<T>> void sort(List<T> list)
Run Code Online (Sandbox Code Playgroud)
那么你必须Cat implements Comparable<Cat>要使用sort.通过使用? super T有界通配符,Collections.sort变得更加灵活.
extends消费者super"Pet*_*hev 11
它意味着T必须实现Comparable<T itself or one of T's superclasses>
意义是因为SortedList它是排序的,它必须知道如何比较它的泛型T参数的两个类.这就是T必须实施的原因Comparable<T itself or one of T's superclasses>
小智 6
这意味着该类型T必须实现Comparable的T还是它的超类之一。
例如,如果Aextends B要使用SortedList<A>,则A必须实现Comparable<A>或Comparable<B>,或者实际上只是just Comparable。
这允许A使用任何有效的比较器构造s 的列表。
| 归档时间: |
|
| 查看次数: |
60039 次 |
| 最近记录: |