首页 > 解决方案 > 扩展泛型类时遇到问题

问题描述

我正在尝试创建一个名为“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>>,该错误就会消失,但是我无法比较我试图在通用数组中排序的两个对象。

谁能帮我?我真的很困惑。任何帮助表示赞赏。

标签: javagenericscomparegeneric-programming

解决方案


您需要将 放在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;
    }
}

推荐阅读