This question already has answers here:
Java- The meaning of <T extends Comparable<T>>?
(7个答案)
上个月关闭。
我正在查看Java的TheAlgorithms存储库,并首先来到了这个目录:https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java。我看到了
这个论坛上还有其他一些问题,类似于我的关于实现
如您所见,
现在,假设您有一个方法,该方法应根据两个对象的自然顺序返回最大值。这种方法如下所示:
注意:使用
以上是通用方法。类型变量
如上所示,将
请注意,为获得最大的灵活性,实际上应像下面这样声明
区别在于使用
What is PECS (Producer Extends Consumer Super)?
Explanation of generic in collection.sort/ comparable code?
(7个答案)
上个月关闭。
我正在查看Java的TheAlgorithms存储库,并首先来到了这个目录:https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java。我看到了
<T extends Comparable<T>>
,但我不知道这意味着什么。我只对泛型了解一点,我知道语法与参数类型范围有关,但是如果有人可以弄清楚它与Comparable<T>
的关系以及Comparable<T>
是什么,那将是非常不错的。这个论坛上还有其他一些问题,类似于我的关于实现
<T extends Comparable<T>>
的问题,但是答案并没有真正阐明Comparable<T>
是什么。 最佳答案
首先,您具有Comparable
界面,大致类似于:
public interface Comparable<T> {
int compareTo(T other);
}
如您所见,
Comparable
的类型参数用作compareTo
方法的参数。通常,T
的type参数是与实现Comparable
接口的类相同的类。这种通用设置有助于将相同类型的实例彼此进行比较。这是一个例子:public class Name implements Comparable<Name> {
@Override
public int compareTo(Name other) {
// compute & return result
}
}
现在,假设您有一个方法,该方法应根据两个对象的自然顺序返回最大值。这种方法如下所示:
public static <U extends Comparable<U>> U max(U left, U right) {
return left.compareTo(right) >= 0 ? left : right;
}
注意:使用
U
作为类型变量而不是T
表示它与T
界面中使用的Comparable
是分开的。以上是通用方法。类型变量
U
由Comparable<U>
上限。这意味着代替U
使用的type参数必须可分配给Comparable<U>
(即Name
的子类型)。例如,如果我们使用Name
作为类型参数,它将起作用,因为Comparable<Name>
可分配给Comparable<U>
。将上限指定为compareTo
的原因是该方法需要调用U
才能正常运行。Name name1 = ...;
Name name2 = ...;
Name max = max(name1, name2); // U is inferred to be Name
如上所示,将
max
作为返回类型还可以将结果分配给与参数类型相同的变量。请注意,为获得最大的灵活性,实际上应像下面这样声明
Comparable<? super U>
方法:public static <U extends Comparable<? super U>> U max(U left, U right) {
return left.compareTo(right) >= 0 ? left : right;
}
区别在于使用
Comparable<U>
作为上限,而不是使用? super U
。这两个问答可以帮助解释为什么使用<T extends Comparable<? super T>>
提供更大的灵活性:What is PECS (Producer Extends Consumer Super)?
Explanation of generic in collection.sort/ comparable code?
关于java - <Textended Comparable <T >>是什么意思? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58705143/
10-12 20:49