Возникли проблемы с расширением общих классов - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь создать универсальный класс с именем "OrderedList", который использует массив универсальных типов для хранения определенного типа с использованием предопределенной сортировки типов.У меня проблемы с тем, что должно показаться простой операцией, и я не понимаю, почему.Вот мой код.

    public OrderedList() {
        list = (T[]) new Object[100];
        size = 0;
    }

    public <T extends Comparable<T>> void add(T o) {
        if (size == list.length) resize();
        list[size] = o;

        for (int i = 0; i < size; i++) {
            o.compareTo((T) list[i]);
        }
        size++;
    }

    private void resize() {
        int newSize = (int) (1.5 * (double) list.length);
        T[] newArray = (T[]) new Object[newSize];
        for (int i = 0; i < size; i++) {
            newArray[i] = list[i];
        }
        list = newArray;
    }

Ошибка, которую я получаю со второй строкой в ​​методе добавления, "list [size] = o".Это дает мне сообщение об ошибке «Несовместимые типы. Обязательно: T. Найдено: T.»Кроме того, всякий раз, когда я беру экземпляр <T extends Comparable<T>>, эта ошибка исчезает, но затем я не могу сравнить два объекта, которые пытаюсь отсортировать в общем массиве.

Может ли кто-нибудь мне помочь?Я действительно смущен этим.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 сентября 2018

Вам нужно поставить T extends Comparable<T> в подпись класса , а не метод подпись.

class OrderedList<T extends Comparable<T>> {
    T[] list;
    int size;

    public OrderedList() {
        list = (T[]) new Object[100];
        size = 0;
    }

    public void add(T o) {
        if (size == list.length) resize();
        list[size] = o;

        for (int i = 0; i < size; i++) {
            o.compareTo((T) list[i]);
        }
        size++;
    }


    private void resize() {
        int newSize = (int) (1.5 * (double) list.length);
        T[] newArray = (T[]) new Object[newSize];
        for (int i = 0; i < size; i++) {
            newArray[i] = list[i];
        }
        list = newArray;
    }
}
...