目前正在进行一项作业,将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
, 等等?
最佳答案
可比较类型是一个引用类型,其类 C
实现 Comparable<C>
界面。该接口(interface)定义了一个方法: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
接口(interface)作为原始类型。如果您使用 Java 5 或更高版本的编译器编译此代码,它将向您发出有关使用原始类型的编译器警告。这并没有实质性地改变答案,但实际上你现在正在有效地谈论实现 Comparable<?>
相反 Comparable<T>
该方法实际上是 compareTo(Object)
.
关于java - Comparable 和 Object 类型的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024879/