为什么Comparable参数化?

时间:2012-12-11 15:51:21

标签: java

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

5 个答案:

答案 0 :(得分: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>会很奇怪 - 但是没有其他方式可以通用的方式引用“实现此接口的类型”,并且能够表达“其他”部分干净利落。

答案 1 :(得分:2)

您可以将XY两种类型都Comparable<B>。只要XY扩展(或实现B),您就可以自由地交叉比较这些对象。

理论上你甚至可以写一个W的课程Comparable<V>。这意味着您可以将其与V进行比较,但W的其他实例进行比较。我现在不能想到一个很好的用例,但这是可能的。

答案 2 :(得分:1)

AFAIK,这是唯一可以说T与自身相容的方式。

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

答案 3 :(得分:0)

Rajikumar,你已经回答了你的问题。 Comparable对于garantee类型安全是通用的,并确保你给出一个正确类型的参数,这是实现Comparable的类。

答案 4 :(得分:0)

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

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