Это очевидно, просто подумайте об этом на секунду.
new Comparable[Capacity];
Здесь вы создаете array
, который будет содержать Comparable
элементов.
Затем вы пытаетесь downcast до array
из Team
, что означает попытку использовать более конкретный тип и что недопустимо ( Upcasting и downcasting в Java ), и, как вы видите, выдает ClassCastException
.
Поскольку ваш array
будет содержать только типы, которые extends Comparable
, вы можете иметь Comparable
array
внутри вашей реализации ArrayList
.
Comparable[] MyList;
Затем вы можете инициализировать его без приведения
MyList = new Comparable[Capacity];
И не забудьте реализовать метод Comparable#compareTo
в вашем классе Team
, иначе код не скомпилируется.
Вы просили привести пример.
public class ArrayList<T extends Comparable> {
private static final int MAX_SIZE = 1000;
private final Comparable<T>[] list;
public ArrayList() {
this(MAX_SIZE);
}
public ArrayList(int capacity) {
list = new Comparable[capacity]; // Casting
}
public T get(final int index) {
return (T) list[index];
}
public void set(final int index, final T value) {
list[index] = value;
}
}
Использование довольно просто
final ArrayList<Team> teamArrayList = new ArrayList<>(3);
teamArrayList.set(0, new Team("One"));
teamArrayList.set(1, new Team("Two"));
teamArrayList.set(2, new Team("Three"));
final String name = teamArrayList.get(0).Name;
Поскольку вы расширили интерфейс Comparable<T>
, вам нужно реализовать его
Сравнивает этот объект с указанным объектом для заказа.Возвращает отрицательное целое, ноль или положительное целое число, поскольку этот объект меньше, равен или больше указанного объекта
Базовый пример:
@Override
public int compareTo(final Team other) {
return name.compareTo(other.name);
}