java.lang.Object继承;无法转换为[java.lang.comparable]

时间:2014-09-14 17:26:42

标签: java

我坚持这个java.lang.ClassException。一般来说,我尝试使用一个简单的方法maxElement()来简单地返回最高的整数,add()方法完美地工作以及覆盖toString(),这最后两个方法是继承的来自ArrayLinearList<T>元素是一个数组。 ArrayLinearList 也能很好地工作。这是我的代码:

public class ArrayLinearList<T> implements LinearList<T>, Iterable<T>{
 protected T[] element; 
 protected int size; 
  *constructors and methods*
  // default constructor makes an T[]element of length 10

}

public class ArrayLinearListTaller1<T extends  Comparable<T>> extends ArrayLinearList<T>{
  public static void main(String[] args) {
    ArrayLinearListTaller1<Integer>x=new ArrayLinearListTaller1<Integer>();
    x.add(0, new Integer(10));
    x.add(1, new Integer(5));
    x.add(2, new Integer(7));
    System.out.println(x);
    System.out.println(x.maxElement());
    }// end of main

 public T maxElement() {
    Arrays.sort(element,0,size);
    T max= element[size-1];//*error here*
    return max;
}

这就是我得到的:

[10,5,7]  
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;

2 个答案:

答案 0 :(得分:2)

传递给Arrays.sort()的元素必须实现Comparable接口。

  

将指定对象数组的指定范围排序   升序,根据其元素的自然顺序。   要排序的范围从索引fromIndex(包括)延伸到   index toIndex,独占。 (如果fromIndex == toIndex,则范围为   排序是空的。)

     

此范围内的所有元素都必须实现   可比的界面。

     

此外,此范围内的所有元素必须是   相互比较(即e1.compareTo(e2)一定不能抛出   对于数组中的任何元素e1和e2的ClassCastException。

因此,element数组中的对象必须实现Comparable接口

答案 1 :(得分:0)

在我看来,无论你的元素类型是什么,都没有实现Comparable接口,你从Arrays.sort()获得异常。也许分享您的完整代码会有所帮助。