目前正致力于将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
类型,其中还包括int
,double
,String
等类型?
答案 0 :(得分:4)
类似的类型是类C
实现Comparable<C>
接口的引用类型。该接口定义了一种方法:int compareTo(<T> other)
。有关详细信息,请阅读javadoc。
在这种意义上,原始类型(例如int
和double
)不是Comparable
,因为基本类型不是引用类型。
类型Object
是一种引用类型,但它不具有可比性,因为它没有实现Comparable<Object>
。
类型String
是引用类型,它实现Comparable<String>
。因此它是一种类似的类型。这从String的javadoc中可以清楚地看出:
public final class String extends Object
implements Serializable, Comparable<String>, CharSequence
primitive types和引用类型之间的差异是Java的基础。原始类型包括boolean
,byte
,char
,short
,int
,long
,float
和double
。引用类型是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接口,我们肯定知道我们可以比较该类的实例。 对象,没有声明任何对象比较方法。所以你无法直接比较两个对象。