奇怪的错误,试图在java中创建一个通用的链表类

时间:2015-05-17 20:01:46

标签: java generics syntax-error

public class GenericLinkedList<T extends Comparable<T>> implements Cloneable {

GenericListNode<T> head;

/**
 * inserts a new node containing the data toAdd at the given index.
 * @param index
 * @param toAdd
 */
public <T> void add (int index, T toAdd) {
    GenericListNode<T> node = new GenericListNode<T>((T) toAdd);
    if (isEmpty()) {
        head = node;
    } else {

    }

}

这是我的代码,由于某些原因,我在做

时遇到了问题
head = node;

它说:

Type mismatch: cannot convert from GenericListNode<T> to GenericListNode <T extends Comparable<T>>

它建议将Casting节点

head = (GenericListNode<T>) node;

但它仍然给我错误。

3 个答案:

答案 0 :(得分:4)

在此声明中

public <T> void add

您正在定义一个名为T的新类型,该类型完全独立于类级别定义的T。这是声明通用方法的符号。

由于这两种类型没有相同的边界,因此它们不兼容,一种不能转换为另一种。

摆脱那种泛型声明。

答案 1 :(得分:3)

请勿在方法中重新定义T

public void add (int index, T toAdd) {
    GenericListNode<T> node = new GenericListNode<T>((T) toAdd);
    if (isEmpty()) {
        head = node;
    } else {

    }
}

T已经在“类级”定义,如果再次在隐藏类级别的方法上添加它,那么您有两种不同的类型T

答案 2 :(得分:2)

您正在重新定义(读取:阴影)T的通用定义。只需从方法定义中删除它就可以了:

public class GenericLinkedList<T extends Comparable<T>> implements Cloneable {

    GenericListNode<T> head;

    /**
     * inserts a new node containing the data toAdd at the given index.
     * @param index
     * @param toAdd
     */
    public void add (int index, T toAdd) {
        GenericListNode<T> node = new GenericListNode<T>(toAdd);
        if (isEmpty()) {
            head = node;
        } else {

        }
    }
}