Java中泛型的语义&x27;比较法

Java中泛型的语义&x27;比较法,java,generics,Java,Generics,在查看JAVA文档时,我发现了比较方法的以下特征 static <T,U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T,? extends U> keyExtractor) static通常意味着一个超类可以实现Comparator。例如,如果Number实现了compariable,则a列表.sort(null)是可以的,因为comparia

在查看JAVA文档时,我发现了比较方法的以下特征

 static <T,U extends Comparable<? super U>>
Comparator<T> comparing(Function<? super T,? extends U> keyExtractor)

static通常意味着一个超类可以实现
Comparator
。例如,如果
Number
实现了
compariable
,则a
列表.sort(null)
是可以的,因为compariable位于整数的超类上


如果没有这一点,比较器将需要具有可比性,并且由于可比性实际上是可比的,所以它将不起作用。

使用生产者扩展消费者超级(PECS)的原理

基本上,PECS表示,如果泛型参数用作方法的参数类型,则应使用反向变量,即
super
。如果用作返回值类型,则应使用协方差,即
扩展


U
被限制为
扩展@AominèI的可比副本。这个问题是关于如何区分在
扩展
超级
中何时使用哪个,而这个问题是关于“为什么”。@Sweeper但是你的答案以PECS开始和结束。。。
Comparable<? super U>