我写了一个代码来用java实现链表,但是当我把它转换成一个泛型类时,我得到了一堆错误。
public class LinkedList<E> {
static class Node<E> {
E data; //encountering error here - "Duplicate field LinkedList.Node<E>.data"
Node<E> next;
public Node<E>(E data){ // error - Syntax error on token ">", Identifier expected after this token
this.data = data;
next = null;
}
}
Node<E> head;
void add(E data){
Node<E> toAdd = new Node<E>(data); //error - The constructor LinkedList.Node<E>(E) is undefined
if(head == null){
head = toAdd;
return;
}
Node<E> temp = head;
while(temp.next != null){
temp = temp.next;
}
temp.next = toAdd;
}
void print(){
Node<E> temp = head;
while(temp != null)
{
System.out.print(temp.data + " ");
temp = temp.next;
}
}
boolean isEmpty(){
return head == null;
}
}
当我没有使类泛型化时,代码工作得很好
2条答案
按热度按时间xggvc2p61#
构造函数中不包含泛型。只是:
e在:
static class Node<E> {}
声明变量。就像foo
在int foo;
. 所有其他地方(嗯,除了public class LinkedList<E>
,它声明了一个完全不同的类型变量,具有完全相同的名称-但是您的节点类是静态的,所以这里没问题)正在使用它。你不需要重新申报E
一件事不止一次。你不需要重述int foo;
每次你用它的时候,你只做一次。gcxthw6b2#
试试这个。构造函数没有获取类型。