我得到不兼容的类型:对象无法转换为T,其中T是类型变量:T扩展在类Stack中声明的Object。
你能帮忙吗,我不知道为什么会这样,方法pop()和getData()属于同一类型T ...
这是缩短的代码。
public class Stack<T> {
Node head;
public T pop() {
return head.getData(); //the error is on this line
}
private class Node <T> {
private final T data;
private Node next;
private Node(T data, Node next) {
this.data=data;
this.next=next;
}
private T getData() {
return data;
}
}
}
答案 0 :(得分:4)
必须是Node<T> head
。您忘了添加类型参数。
答案 1 :(得分:2)
您已声明一个内部类Node
,它定义了自己的类型参数T
(它与Stack
的{{1}}不同)。但是,在声明T
时,您使用的是原始Node
。类型擦除适用,在原始head
上调用getData()
会返回Node
。
删除Object
上的类型参数T
。因为它不是Node
,所以static
的类的Stack
类型参数在T
的范围内。 Node
只需使用Node
的{{1}}类型参数。
Stack