扩展泛型类时遇到问题

时间:2018-09-26 12:48:51

标签: java generics compare generic-programming

我正在尝试创建一个名为“ 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;
    }

我遇到的错误是add方法的第二行“ list [size] = o”。它为我提供了一个错误消息,指出“类型不兼容。要求:T。找到:T”。另外,每当我使用<T extends Comparable<T>>的实例化时,该错误就会消失,但随后我将无法比较要在通用数组中排序的两个对象。

有人可以帮助我吗?我真的对此感到困惑。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:4)

您需要将T extends Comparable<T>放在 class 签名中,而不是 method 签名。

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;
    }
}