我知道这个类比较了一个类中的两个对象(例如两个字符串),但使用这个类的类型是不可比的?
答案 0 :(得分:15)
这不是它的工作原理。 Comparable
是一个接口,任何类可能会选择实现,以指示可以使用类“compareTo()
比较类的实例方法。因此,您可以选择在自己创建的任何类中实现此接口(但是,您必须自己编写compareTo()
的代码,因为Java不知道如何以有意义的方式比较对象)。
一些内置类实现Comparable
而另一些没有实现 - 某个地方可能有列表,但对于SO答案来说太长了。如果您想知道特定类是否实现compareTo()
,请检查其文档(并查看比较是否符合您的预期),或者只是尝试调用该方法。如果存在未实现Comparable
的内置或第三方类,则需要创建Comparator
以进行比较。
Comparator
可以比较您想要的任何内容,因为您决定它应该如何运作。
答案 1 :(得分:3)
实际上,您可以比较Java中的所有内容。
例如,您有一个类X
,这是无法比拟的。您可以将此类设置为另一个类C
的属性,并使C
具有可比性,覆盖其compareTo()
方法。
例如,比较颜色
没有意义
这是对的。即使它没有意义,你也可以。以下是问题的答案:
哪种颜色更亮?
public class ComparableColor implements Comparable<ComparableColor>
{
Color color;
public ComparableColor(Color color)
{
this.color = color;
}
@Override
public int compareTo(ComparableColor c)
{
return c.color.getAlpha() - this.color.getAlpha();
}
}
答案 2 :(得分:2)
例如,比较Colors没有意义,因此该类不实现Comparable接口。现在,如果你想要一个没有实现Comparable的所有类的列表,我不认为那里有一个。