Java 不兼容的类型对象无法转换为t,其中t是类型变量

Java 不兼容的类型对象无法转换为t,其中t是类型变量,java,types,Java,Types,我得到了不兼容的类型:无法将对象转换为T,其中T是一个类型变量:T扩展类堆栈中声明的对象。 你能帮忙吗,我不知道为什么,方法pop()和getData()属于同一类型的t… 这是缩短的代码 public class Stack<T> { Node head; public T pop() { return head.getData(); //the error is on this line } private class

我得到了不兼容的类型:无法将对象转换为T,其中T是一个类型变量:T扩展类堆栈中声明的对象。
你能帮忙吗,我不知道为什么,方法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;
        } 
    }
}
公共类堆栈{
节点头;
公共广播电台{
return head.getData();//错误在这一行
}
私有类节点{
私有最终T数据;
私有节点下一步;
专用节点(T数据,下一个节点){
这个。数据=数据;
this.next=next;
}
私有T getData(){
返回数据;
} 
}
}

它必须是
节点头
。您忘记添加类型参数。

您已经声明了一个内部类
节点
,该节点定义了自己的类型参数
T
(它不同于
Stack
T
)。但是,当您声明
头时,您使用的是原始
节点
。类型擦除适用,在原始
节点上调用
getData()
将返回一个
对象

private class Node  {
删除
节点上的类型参数
T
。由于它不是
静态的
堆栈
的类的
T
类型参数在
节点
的范围内
Node
可以简单地使用
Stack
T
类型参数

private class Node  {

谢谢你,我知道这一定是件小事:)@FiloménaPetržlénová-
rgetmann
也做出了明智的回答。Node类应该是静态的“private static class Node”,否则每个Stack对象都会有一个单独的Node对象,这是不需要的。实际上我的意思是,当Node类实例化时,它会有一个对Stack对象的引用,这是不需要的。很好的答案,我也认为Node类应该是静态的。