【发布时间】:2015-01-18 00:35:49
【问题描述】:
我正在尝试实现已排序和未排序的数组列表。两者都扩展了一个名为 AbstractArrayMyList 的类,其中包含常见的操作/实现 - toString、clear 等......
这是我的 AbstractArrayMyList 代码(它实现了我定义的通用接口)
public abstract class AbstractArrayMyList<E> implements MyList<E> {
protected E[] elementData;
.....
}
我选择对 elementData 进行保护,以便已排序和未排序的专用数组列表可以访问并对其执行操作。这是我的排序数组列表的声明/代码
public class ArrayListSorted<E extends Comparable<E>> extends AbstractArrayMyList<E>
这一切都编译得很好。但是,当我用这些行测试我的代码时
ArrayListSorted<Integer> toTestInteger = new ArrayListSorted<Integer>()
toTestInteger.insert(0);
assertEquals(toTestInteger.get(0).intValue(), 0);
我得到一个类转换异常
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
at myarraylist.ArrayListSorted.getIndex(ArrayListSorted.java:38)
发生在这里
@Override
public int getIndex(E value) {
int lo = 0;
int hi = size;
while (lo <= hi) {
// Key is in a[lo..hi] or not present.
int mid = lo + (hi - lo) / 2;
if (value.compareTo(elementData[mid]) < 0) hi = mid - 1;
该异常与 compareTo 发生在同一行。有谁知道问题是什么?我定义了有界通配符,E extends Comparable,这意味着任何希望使用 ArrayListSorted 的类都必须实现 Comparable 接口...
我的意思是我什至有正确的语法,从http://docs.oracle.com/javase/tutorial/java/generics/upperBounded.html,类型扩展类/接口
【问题讨论】:
标签: java arrays generics interface comparable