我试图用Java .util. linkedlist库编写一个简单的代码来实现Java中的链表。我已经尽了最大的努力使它没有错误。
使用-Xlint:unchecked编译(和执行)。但是它会生成很多类型的警告- LL.java:25: warning: [unchecked] unchecked调用add(E)作为原始类型LinkedList的成员
有人能帮帮我吗1. 明白为什么会这样吗?2. 删除警告!
如有任何帮助,我将不胜感激。
import java.util.LinkedList;
class LL{
public static void main(String[] args){
//creating a new linked list object
LinkedList LLobj = new LinkedList();
//adding data to linked list
LLobj.add("T");
LLobj.add("H");
LLobj.add("I");
LLobj.add("S");
LLobj.add(" ");
LLobj.add("I");
LLobj.add("S");
LLobj.add(" ");
LLobj.add("A");
LLobj.add(" ");
LLobj.add("L");
LLobj.add("I");
LLobj.add("N");
LLobj.add("K");
LLobj.add("E");
LLobj.add("D");
LLobj.add("-");
LLobj.add("L");
LLobj.add("I");
LLobj.add("S");
LLobj.add("T");
//printing the linked list
System.out.println(LLobj);
//Implementing more functions to add data
LLobj.addFirst("#");
LLobj.addLast("#");
LLobj.add(5,"$");
//printing the linked list
System.out.println(LLobj);
//removing data
LLobj.remove("$");
LLobj.remove("#");
LLobj.remove("#");
//printing the linked list
System.out.println(LLobj);
}
}
嗯,您正在使用泛型(LinkedList<E>
),但是您将其用作原始类型,就好像您不知道泛型一样。您需要这样的内容:
LinkedList<String> list = new LinkedList<String>();
list.add("T");
list.add("H");
这样在涉及的类型方面,是安全的,并且您知道列表中的所有内容都是字符串。
在Java 7中,您可以使用"菱形语法"从左侧推断右侧的类型:
LinkedList<String> list = new LinkedList<>();
有关泛型(包括原始类型)的更多信息,请参阅Java泛型FAQ。还要注意,在我的例子中,我如何将LLobj
变量名称(不遵循Java命名约定)重命名为list
。始终遵循命名约定是个好主意,尤其是在与他人共享代码时。
您只需指定链表的类型,如下所示:
LinkedList<String> LLobj = new LinkedList<>();
这将告诉编译器只使用String
s,因此.add()
方法是安全的,因为它们只接受String
输入(因为String
是final
类,不能是extend
类)。
变化
LinkedList LLobj = new LinkedList();
LinkedList<String> LLobj = new LinkedList<String>();
这将解决所有类型安全警告,因为现在编译器将知道您打算将String
s保留在列表中。
给它一个类型
的例子:
LinkedList<String> LLobj = new LinkedList<String>();
代码:LinkedList LLobj = new LinkedList();
必须替换为LinkedList<String> LLobj = new LinkedList<String>();
编译器会警告你,因为你没有在代码中使用泛型,即你需要在列表中保存的对象类型。通过在代码中不使用泛型,您可以在列表中输入任何类型的对象,例如:LLobj.add(new Integer(10)); LLobj.add("ABC");
这将导致ClassCastException,因为你不知道哪个类型的对象将来自列表。它可以是String或Integer。因此,它给出了警告信息。通过使用特定的类型,如LinkedList<String> LLobj = new LinkedList<String>();
,你只能添加String到你的列表,因此没有ClassCastException将发生在任何地方