我在创建链接列表时遇到一个错误,上面写着:
线程"main"java.lang中出现异常。错误:未解决的编译问题:
类型LinkedList不是泛型;它不能用参数<字符串>
在LinkedList.main(LinkedList.java:7)
有人知道如何修复这个错误吗?这是程序:
import java.util.*;
public class LinkedList {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
Scanner input = new Scanner(System.in);
System.out.print("How many elements do you want to add: ");
int num = input.nextInt();
for(int i = 0; i < num; i++) {
System.out.print("Add Element: ");
String element = input.next();
list.add(element);
}
System.out.println();
System.out.println("LinkedList elements are: ");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
更改
new LinkedList<String>()
至
new java.util.LinkedList<String>()
问题的根源在于LinkedList
指的是包含代码class LinkedList
的类,而不是java.util.LinkedList
。
像LinkedList
这样的不合格类名(与像java.util.LinkedList
这样的"完全合格名称"相反)是通过按特定顺序查找匹配来解决的。大致
- 查找包含类
- 查找非通配符导入
- 在同一个包中查找类
- 查找通配符导入
Java语言规范的"6.5确定名称的含义"一节对此进行了更详细的解释。
您的类也被称为LinkedList,因此它会发生冲突。如果您想修复它,请使用此行。更好的是,为你的班级取一个不同的名字。。。
List<String> list = new java.util.LinkedList<String>();
public class LinkedList {
您的类未定义为泛型。不过,我认为您正在尝试使用Java的LinkedList,因此应该重命名您的类。
您将main
方法放在一个名为LinkedList
的类中,该类在编译器的名称解析算法中优先于内置的LinkedList
类。换句话说,因为main
方法在一个名为LinkedList
的类中,所以编译器将名称LinkedList
取为您的LinkedList
类,而不是java.util.LinkedList
。有两个简单的修复方法:
- 重命名你的类
而不是写
列表列表=新的LinkedList();
写入
列表列表=新java.util.LinkedList();
我强烈推荐第一种选择。由于LinkedList
类实际上并不表示链表数据结构,因此类上的名称会让阅读代码的人感到困惑。也许可以将你的类称为LinkedListTest
,即你的文件可能是
import java.util.*;
public class LinkedListTest {
// Implementation of main and helper methods
}
public class LinkedList {
您将自己的类命名为LinkedList
,因此它优先于java.util.LinkedList
。
要么将类的名称更改为其他名称,要么执行new java.util.LinkedList<String>()
以明确您想要的名称。