泛型不兼容的类型:java。无法将lang.Object转换为T
这是我的密码:
package datastructures;
import java.util.Iterator;
public class Stack<T>{
private class Node<T>{
T data;
Node next;
}
private int size;
private Node head;
private Node newNode(T data){
Node new_node = new Node();
new_node.data = data;
new_node.next = null;
return new_node;
}
public Stack(){
size = 0;
head = null;
}
public T pop() {
if(head == null)
return null;
T ret_val = head.data; //Error here
head = head.next;
this.size--;
return ret_val;
}
}
我在pop方法中得到错误,下面是错误:
Error: incompatible types : java.lang.Object cannot be converted to T
我不理解这个错误,我没有在代码中的任何地方使用对象
# 1 楼答案
(对于Java 8)可以将类型化变量与菱形运算符一起使用:
否则泛型初始化为
Object
,因此显示错误# 2 楼答案
当您将节点声明为
您正在声明一个泛型类型,并将另一个T作为封闭类型中的T。你在隐藏T。所以,简言之,就好像你在宣布它是
只用
# 3 楼答案
节点的数据字段不知道其类型
尝试在初始化头时指定类型
现在,新节点知道数据字段的类型为T
# 4 楼答案
您正在使用自己的类型参数声明
Node
内部类型,因此Node
阴影的T
阴影的Stack
,它们本质上是不同的类型在
Node
类型中删除类型参数<T>
的声明(这可能就是您的意思)