java中的泛型链表
我正在学习泛型,想创建一个泛型链表 但我得到以下编译时错误java中的泛型链表,java,generics,linked-list,Java,Generics,Linked List,我正在学习泛型,想创建一个泛型链表 但我得到以下编译时错误 类型不匹配:无法从LinkedList.Node转换为 LinkedList.Node 公共类链接列表{ 私有节点头=null; 私有类节点{ E值; 节点下一步; //节点构造函数将节点链接为新头 节点(E值){ 这个值=值; this.next=head;//此处出现错误 head=this;//此处获取错误 } } 公共空间添加(E){ 新节点(e); } 公共空转储(){ for(节点n=头;n!=null;n=n.next)
类型不匹配:无法从LinkedList.Node转换为
LinkedList.Node
公共类链接列表{
私有节点头=null;
私有类节点{
E值;
节点下一步;
//节点构造函数将节点链接为新头
节点(E值){
这个值=值;
this.next=head;//此处出现错误
head=this;//此处获取错误
}
}
公共空间添加(E){
新节点(e);
}
公共空转储(){
for(节点n=头;n!=null;n=n.next)
系统输出打印(n.value+“”);
}
公共静态void main(字符串[]args){
LinkedList=新建LinkedList();
列表。添加(“世界”);
添加(“你好”);
list.dump();
}
}
请告诉我为什么会出现此错误???此处
E
私有类节点{隐藏E
此处:公共类链接列表{
节点
类不需要是泛型。
它包含一个泛型字段值
,它取决于LinkedList
中的E
泛型。这就足够了
public class LinkedList<E> {
private Node head = null;
private class Node {
E value;
Node next;
// Node constructor links the node as a new head
Node(E value) {
this.value = value;
this.next = head;//Getting error here
head = this;//Getting error here
}
}
public void add(E e) {
new Node(e);
}
public void dump() {
for (Node n = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("world");
list.add("Hello");
list.dump();
}
}
您必须知道这两个变量并不依赖于同一类型
是在next
类中以以下方式声明的字段:Node
Node next
是在head
类中声明的一个字段,其方式为:LinkedList
Node head
节点
类中声明的E
类型不被编译器视为与链接列表
类中声明的E
类型相同,因为这是两个不同的类型声明
因此,这里:
this.next = head;
编译器无法将fromLinkedList.Node
分配给LinkedList.Node
,因为Node
类中的Node next
字段和LinkedList
类中的Node head
字段未声明
相同类型(并且也不可转换)。此处
E
私有类节点{隐藏E
此处:公共类链接列表{
节点
类不需要是泛型。
它包含一个泛型字段值
,它取决于LinkedList
中的E
泛型。这就足够了
public class LinkedList<E> {
private Node head = null;
private class Node {
E value;
Node next;
// Node constructor links the node as a new head
Node(E value) {
this.value = value;
this.next = head;//Getting error here
head = this;//Getting error here
}
}
public void add(E e) {
new Node(e);
}
public void dump() {
for (Node n = head; n != null; n = n.next)
System.out.print(n.value + " ");
}
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("world");
list.add("Hello");
list.dump();
}
}
您必须知道这两个变量并不依赖于同一类型
是在next
类中以以下方式声明的字段:Node
Node next
是在head
类中声明的一个字段,其方式为:LinkedList
Node head
节点
类中声明的E
类型不被编译器视为与链接列表
类中声明的E
类型相同,因为这是两个不同的类型声明
因此,这里:
this.next = head;
编译器无法将fromLinkedList.Node
分配给LinkedList.Node
,因为Node
类中的Node next
字段和LinkedList
类中的Node head
字段未声明
相同类型(并且也不可转换)。您不需要设置
节点
泛型。由于它是一个内部类,由于周围类的泛型性质,它将是泛型的。设置内部类泛型类型E不起作用,因为类型参数E隐藏类型E
(第4行的编译器警告)您不需要设置节点
泛型。由于它是一个内部类,因此由于周围类的泛型性质,它将是泛型的。设置内部类泛型类型E不起作用,因为类型参数E隐藏类型E
(第4行的编译器警告)您能告诉我当编译器抛出错误消息时,它想说什么吗?您能告诉我当编译器抛出错误消息时,它想说什么吗
this.next = head;