由于Comparable
只导出一个函数,并且that function只接受一个类型为“this”的参数(实现Comparable的类),为什么Comparable参数化?鉴于Comparable用于自然排序,为什么有人会传递一个与实现此接口的类不同的类?
答案 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)
您可以将X
和Y
两种类型都Comparable<B>
。只要X
和Y
扩展(或实现B
),您就可以自由地交叉比较这些对象。
理论上你甚至可以写一个W
的课程Comparable<V>
。这意味着您可以将其与V
进行比较,但不与W
的其他实例进行比较。我现在不能想到一个很好的用例,但这是可能的。
答案 2 :(得分:1)
AFAIK,这是唯一可以说T与自身相容的方式。
他们可以添加一些速记来表达这一点,我怀疑它不会更短。
答案 3 :(得分:0)
Rajikumar,你已经回答了你的问题。 Comparable对于garantee类型安全是通用的,并确保你给出一个正确类型的参数,这是实现Comparable的类。
答案 4 :(得分:0)
使用此参数,您无需使用instanceof运算符。
Comparable通常用于比较对象的实例是否与另一个实例相对应。例如,如果你想现在如果DogA与DogB相同,你知道没有人是猫。所以你永远不会看到猫是否是狗,因为它们有不同的起源。这个