在java中编译链接列表代码时的警告

shi*_*i93 1 java compiler-construction warnings linked-list list

我正在尝试编写一个简单的代码,使用java.util.LinkedList库在Java中实现Linked List.我尽力保持它没有错误.

它使用-Xlint编译(并执行):unchecked.但它产生了很多类型的警告--LL.java:25:警告:[未经检查]未经检查的调用添加(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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

好吧,你使用的是泛型类型(LinkedList<E>),但是你将它用作原始类型,就像你不了解泛型一样.你想要这样的东西:

LinkedList<String> list = new LinkedList<String>();

list.add("T");
list.add("H");
Run Code Online (Sandbox Code Playgroud)

这样你在涉及的类型方面是安全的,并且你知道列表中的所有内容都是字符串.

在Java 7中,您可以使用"菱形语法"从左侧推断右侧的类型:

LinkedList<String> list = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)

对于很多更多的仿制药(包括原料类型),请参阅Java泛型常见问题解答.另请注意,在我的示例中,我将您的LLobj变量名称(不遵循Java命名约定)重命名为just list.始终遵循命名约定是个好主意,尤其是在与其他人共享代码时.