可比课程无法比较的是什么?

时间:2014-04-21 21:26:14

标签: java

我知道这个类比较了一个类中的两个对象(例如两个字符串),但使用这个类的类型是不可比的?

3 个答案:

答案 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的所有类的列表,我不认为那里有一个。