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;
但它仍然给我错误。
答案 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 {
}
}
}