由于Comparable
只导出一个函数,并且该函数只接受一个“this”类型的参数(实现 Comparable 的类),为什么 Comparable 参数化?鉴于 Comparable 用于自然排序,为什么有人会传递与实现此接口的类不同的类?
5 回答
好吧,当您想到消耗它的东西时,它很有用。例如:
public <T extends Comparable<T>> void sort(List<T> list)
这样你就可以item.compareTo(otherItem)
以类型安全的方式调用,只要两者都是T
.
同样,在实现它时,您可以编写:
public int compareTo(MyClass other)
而不必使用:
public int compareTo(Object other)
然后铸造。
所以是的,实现起来会很奇怪Comparable<SomethingElse>
- 但是没有其他方法可以以通用方式引用“实现此接口的类型”,并且能够清晰地表达“其他”部分很有用。
您可以有两种类型X
,Y
它们都是Comparable<B>
. 只要同时扩展(或实现)两者X
,您就可以自由地交叉比较这些对象。Y
B
从理论上讲,您甚至可以编写W
一个Comparable<V>
. 这意味着您可以将其与其他实例进行比较,V
但不能W
与. 我目前想不出一个好的用例,但这是可能的。
AFAIK,这是说 T 与自身可比的唯一方法。
他们本可以添加一些速记来表达这一点,我怀疑它不会更短。
使用此参数,您不需要使用 instanceof 运算符。
Comparable 通常用于比较一个对象的实例是否对应于另一个实例。例如,如果你想现在如果 DogA 与 DogB 相同,你就知道没有人是猫。所以你永远不会知道猫是不是狗,因为它们有不同的起源。这个
Rajikumar,你已经回答了你的问题。Comparable 对保证类型安全是通用的,并确保您提供正确类型的参数,即实现 Comparable 的类。