2012-02-26 209 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