2014-04-12 72 views
4

當前我正在處理將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,doubleString等?

回答

1

您可以使用Comparable,因爲Comparable類型是通用的,因此您可以準確指定您的「類似」類型,同時也保證類型安全。基類Object不包含這樣的事情。

另外,您不使用通用版本Comparable。這是一個問題,您正在使用舊類型的Comparable。

+1

啊我明白了!所以'Comparable'和'Object'之間的區別在於它是類型安全的?另外,你在哪裏指定你可以比較的類型? – theGreenCabbage

+0

@theGreenCabbage這是主要原因。此外,我注意到在我的問題編輯中指出的代碼中的某些內容。 – AxiomaticNexus

+0

看起來教授的答案鍵也被棄用,因爲我的名字與他的相似。什麼是不被棄用的方式來做到這一點? – theGreenCabbage

4

可比類型是參考類型,其類C實現了Comparable<C>接口。界面定義了一種方法:int compareTo(<T> other)。詳情請閱讀javadoc

  • 基本類型(例如intdouble)不Comparable在這個意義上,因爲原始類型不引用類型。

  • 類型Object是一個參考類型,但它不是一個可比較的因爲它不實施Comparable<Object>

  • 類型String是一個參考類型,它實現了Comparable<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)

+0

通過基本類型,你是指「對象」類型? – theGreenCabbage

+0

@ theGreenCabbage - 編號「對象」不是原始類型。 –

+0

我仍然沒有完全理解您的答案中的Comparable或Object之間的區別:/ – theGreenCabbage

0

可比是一個接口,而不是一個類。接口強制實現它的任何類具有在接口中聲明的方法的方法實現。 Comparable接口聲明一個名爲compareTo的方法來比較兩個對象(用於對一組對象進行排序)。所以如果一個類實現了Comparable接口,我們可以確定我們可以比較該類的實例。 對象,不聲明任何對象比較的方法。所以你不能直接比較兩個對象。

+0

你是對的,它不是一個類的接口。 – theGreenCabbage

相關問題