在java中将类转换为泛型时出现重复字段错误

wn9m85ua  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(372)

我写了一个代码来用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;
 }

}

当我没有使类泛型化时,代码工作得很好

xggvc2p6

xggvc2p61#

构造函数中不包含泛型。只是:

public Node(E data) { ... }

e在: static class Node<E> {} 声明变量。就像 fooint foo; . 所有其他地方(嗯,除了 public class LinkedList<E> ,它声明了一个完全不同的类型变量,具有完全相同的名称-但是您的节点类是静态的,所以这里没问题)正在使用它。你不需要重新申报 E 一件事不止一次。你不需要重述 int foo; 每次你用它的时候,你只做一次。

gcxthw6b

gcxthw6b2#

public class LinkedList<E> {
    Node<E> head;

    void add(E data) {
        Node<E> toAdd = new Node<E>(data);
        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;
    }

    public static class Node<E> {
        E data;
        Node<E> next;

        public Node(E data) {
            this.data = data;
            next = null;
        }
    }

}

试试这个。构造函数没有获取类型。

相关问题