有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在扩展泛型类方面有问题

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

  1. # 1 楼答案

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