Comparable和Object类型之间的区别

时间:2014-04-12 01:08:55

标签: java comparable

目前正致力于将Comparable的概念置于应用程序中的作业。

我写了这个简单的方法,允许输入Comparable[]数组。此方法返回任何给定数组输入的最小值。使用.compareTo()方法,我能够真正扩展此方法,以允许对象类型的真实,任何东西,无论它是自定义实现,如Point类(我们为分配做了,但这里没有显示)。

public static Comparable getMinimum(Comparable[] inputArray)
{
    Comparable newObj = inputArray[0];
    for(int i = 0; i < inputArray.length; i++)
    {
        Integer retValue = (inputArray[i]).compareTo(newObj);
        if(retValue < 0)
        {
            newObj = inputArray[i];
        }
    }
    return newObj;
}

我的问题是 - 这Comparable类型是什么?看看Java API,它并没有真正揭示出来。我们为什么使用Comparable类型而非Object类型,其中还包括intdoubleString等类型?

3 个答案:

答案 0 :(得分:4)

类似的类型是类C实现Comparable<C>接口的引用类型。该接口定义了一种方法:int compareTo(<T> other)。有关详细信息,请阅读javadoc

  • 在这种意义上,原始类型(例如intdouble)不是Comparable,因为基本类型不是引用类型。

  • 类型Object是一种引用类型,但它不具有可比性,因为它没有实现Comparable<Object>

  • 类型String是引用类型,它实现Comparable<String>。因此它是一种类似的类型。这从String的javadoc中可以清楚地看出:

    public final class String extends Object
        implements Serializable, Comparable<String>, CharSequence
    

primitive types和引用类型之间的差异是Java的基础。原始类型包括booleanbytecharshortintlongfloatdouble 。引用类型是Java类和Java数组类型。


现在在您的示例中,您实际上使用Comparable接口作为原始类型。如果使用Java 5或更高版本的编译器编译此代码,它将为编译器提供有关使用原始类型的警告。这并没有实质性地改变答案,但实际上您现在正在有效地讨论实施Comparable<?>而不是Comparable<T>,并且该方法实际上是compareTo(Object)

答案 1 :(得分:1)

您使用Comparable因为Comparable类型是通用的,因此您可以准确指定您的类型&#34;可比较的&#34;同时也保持物品安全。 Object基类不包含这样的东西。

此外,您还没有使用Comparable的通用版本。这是一个问题,您使用旧版本的Comparable。

答案 2 :(得分:0)

Comparable是一个接口,而不是一个类。接口强制执行实现它的任何类,以具有在接口中声明的方法的方法实现。 Comparable接口声明了一个名为compareTo的方法,用于比较两个对象(用于排序一组对象)。因此,如果一个类实现Comparable接口,我们肯定知道我们可以比较该类的实例。 对象,没有声明任何对象比较方法。所以你无法直接比较两个对象。