不兼容的类型对象不能转换为t,其中t是一个类型变量

时间:2015-03-27 20:33:13

标签: java types

我得到不兼容的类型:对象无法转换为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;
        } 
    }
}

2 个答案:

答案 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