在 Java 中将 class 转换为泛型时出现重复字段错误
Duplicate field error while converting a class to generic in Java
我在 java 中编写了一个实现链表的代码,但是当我将它转换为一个泛型时 class 我遇到了一堆错误。
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;
}
}
当我没有将 class 设为通用
时,代码运行良好
您没有在构造函数中包含泛型。只是:
public Node(E data) { ... }
static class Node<E> {}
中的E声明了变量。就像 int foo;
中的 foo
。所有其他地方(好吧,除了 public class LinkedList<E>
,它声明了一个具有完全相同名称的完全不同的类型变量 - 但您的节点 class 是静态的,所以在这里没关系)正在使用它。您不需要多次重新声明 E
是一个东西。您无需在每次使用时都重复 int foo;
,或者:您只需重复一次。
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;
}
}
}
试试这个。构造函数未获取类型。
我在 java 中编写了一个实现链表的代码,但是当我将它转换为一个泛型时 class 我遇到了一堆错误。
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;
}
}
当我没有将 class 设为通用
时,代码运行良好您没有在构造函数中包含泛型。只是:
public Node(E data) { ... }
static class Node<E> {}
中的E声明了变量。就像 int foo;
中的 foo
。所有其他地方(好吧,除了 public class LinkedList<E>
,它声明了一个具有完全相同名称的完全不同的类型变量 - 但您的节点 class 是静态的,所以在这里没关系)正在使用它。您不需要多次重新声明 E
是一个东西。您无需在每次使用时都重复 int foo;
,或者:您只需重复一次。
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;
}
}
}
试试这个。构造函数未获取类型。