0

由于Comparable只导出一个函数,并且该函数只接受一个“this”类型的参数(实现 Comparable 的类),为什么 Comparable 参数化?鉴于 Comparable 用于自然排序,为什么有人会传递与实现此接口的类不同的类?

4

5 回答 5

3

好吧,当您想到消耗它的东西时,它很有用。例如:

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>- 但是没有其他方法可以以通用方式引用“实现此接口的类型”,并且能够清晰地表达“其他”部分很有用。

于 2012-12-11T15:52:53.277 回答
2

您可以有两种类型XY它们都是Comparable<B>. 只要同时扩展(或实现)两者X,您就可以自由地交叉比较这些对象。YB

从理论上讲,您甚至可以编写W一个Comparable<V>. 这意味着您可以将其与其他实例进行比较,V不能W与. 我目前想不出一个好的用例,但这是可能的。

于 2012-12-11T15:53:32.327 回答
1

AFAIK,这是说 T 与自身可比的唯一方法。

他们本可以添加一些速记来表达这一点,我怀疑它不会更短。

于 2012-12-11T15:53:56.740 回答
0

使用此参数,您不需要使用 instanceof 运算符。

Comparable 通常用于比较一个对象的实例是否对应于另一个实例。例如,如果你想现在如果 DogA 与 DogB 相同,你就知道没有人是猫。所以你永远不会知道猫是不是狗,因为它们有不同的起源。这个

于 2012-12-11T16:03:57.890 回答
0

Rajikumar,你已经回答了你的问题。Comparable 对保证类型安全是通用的,并确保您提供正确类型的参数,即实现 Comparable 的类。

于 2012-12-11T15:55:14.203 回答