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



我试图用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输入(因为Stringfinal类,不能是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将发生在任何地方

相关内容

  • 没有找到相关文章

最新更新