2012-02-26 66 views
1

我正在嘗試編寫一個方法來確定ArrayList是否按升序排列。 ArrayList的類型可以是整數,字符串等作爲一個Java初學者,我已經花了幾個小時讓我周圍的仿製藥,具有可比性等頭,這就是我這麼遠:確定ArrayList是否按順序的通用方法(Java)

static boolean isOrdered(ArrayList<? extends Comparable<?>> a) { 
    for(int i=0; i < a.size()-1; i++) { 
     if (a.get(i).compareTo(a.get(i+1)) > 0) return false; 
    } 
    return true; 
} 

我得到以下編譯錯誤:

The method compareTo(capture#11-of ?) in the type Comparable is not applicable for the arguments (capture#12-of ? extends Comparable

從我所收集從閱讀this我明白,這是因爲它是不知道,如果一個比較可以進行。不過,我仍然不確定如何解決這個問題。

我對Java仍然很陌生(來自Python)。如有任何建議/見解,我們將不勝感激。謝謝!

回答

4

問題在於這裏的泛型。解決這個問題的方法是告訴編譯器,所有的元素都是同一類型的,稱爲T

static <T extends Comparable<T>> boolean isOrdered(ArrayList<T> list) 
    ... 
} 

這意味着整個列表包含某種類型T支持比較值與其它T的所有元素值。

+0

啊我明白了,謝謝!我沒有意識到我必須在靜態之後定義類型;我試過在括號內沒有(有用)效果 – xlm 2012-02-26 04:55:38

+1

以獲得最佳效果使用'> – newacct 2012-02-26 13:03:09

相關問題