У меня есть два класса, класс AbstractArrayMyList и класс ArrayListSorted, который расширяет AbstractArrayMyList.Почему я получаю исключение класса?
Вот мое заявление для AbstractArrayMyList и соответствующих конструкторы
public abstract class AbstractArrayMyList<E extends Comparable<E>> implements MyList<E> {
private static final int DEFAULT_CAPACITY = 100;
protected E[] elementData;
public AbstractArrayMyList() {
this(DEFAULT_CAPACITY);
}
public AbstractArrayMyList(int capacity) {
elementData = (E[]) new Object[capacity];
}
с MyList быть АДТ интерфейса
, и моему ArrayListSorted класса (с соответствующим конструктору),
public class ArrayListSorted<E extends Comparable<E>> extends
AbstractArrayMyList<E> {
public ArrayListSorted() {
super();
}
}
Вот является строка кода, вызывающая исключение класса. (Только создание списка массив отсортированный класса с ограниченным типа Integer. Im действительно путают о том, почему это исключение происходит.
ArrayListSorted<Integer> toTestInteger = new ArrayListSorted<Integer>();
chrylis объяснил здесь, Why am i getting a class cast exception(with generics, comparable)?, что вопрос в том, что виртуальная машина видит мой новый объект [емкость] как массив объектов. Я согласен с этой точкой, но это было, когда определение для моего AbstractArrayMyList было еще
public abstract class AbstractArrayMyList<E> implements MyList<E>
, а это означает, что усилитель должен рассматривать Е как на объект, так как он ничего не знает еще об этом. но так как Я добавил, что E extends Comparable не должен допускать, чтобы этот листинг был разрешен? JVM распознает это как массив сопоставимых объектов ектов?
Я тоже это пробовал, но проблема в том, что AbstractArrayMyList работает с массивом elementData, который содержит элементы, которые не обязательно являются сопоставимыми, потому что E не реализует Comparable в AbstractArrayMyList – committedandroider
О, я вижу, я обновлю свой ответ – dkatzel
спасибо :))) И неважно, чтобы несортированный массив работал с типами Comparable? – committedandroider