1

java.util.LinkedListライブラリを使用してJavaでリンクリストを実装するための簡単なコードを作成しようとしています。エラーが発生しないように最善を尽くしました。

-Xlint:uncheckedを使用してコンパイル(および実行)します。しかし、それはタイプの多くの警告を生成します-LL.java:25:警告:[チェックされていない]生のタイプLinkedListのメンバーとしてadd(E)へのチェックされていない呼び出し

誰かが私を助けることができますか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);
    }
}
4

5 に答える 5

8

さて、あなたはジェネリック型(LinkedList<E>)を使用していますが、ジェネリックについて知らなかったかのように、それを生の型として使用しています。あなたはこのようなものが欲しいです:

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

list.add("T");
list.add("H");

そうすれば、関係するタイプに関して安全であり、リスト内のすべてが文字列であることがわかります。

Java 7では、「ひし形構文」を使用して、左側から右側のタイプを推測できます。

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

ジェネリックス(生の型を含む)の詳細については、JavaジェネリックスのFAQを参照しください。また、私の例では、変数名(Javaの命名規則に従わない)の名前を単にに変更したことにも注意してください。特にコードを他の人と共有する場合は、常に命名規則に従うことをお勧めします。LLobjlist

于 2013-03-24T14:01:03.537 に答える
2

次のように、リンクリストのタイプを指定する必要があります。

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

Stringこれにより、 sのみが使用されるため、メソッドの安全性がコンパイラに通知されます。これは、入力.add()のみを受け入れるためです(クラスであり、編集できません)。StringStringfinalextend

于 2013-03-24T14:01:03.067 に答える
1

変化する

LinkedList LLobj = new LinkedList();

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

これにより、これらの型安全性の警告がすべて解決されます。これで、コンパイラーはString、リストにsを保持しようとしていることを認識します。

于 2013-03-24T14:01:16.610 に答える
1

タイプを与える

例:

LinkedList<String> LLobj = new LinkedList<String>();
于 2013-03-24T14:01:44.040 に答える
1

コード:は次のLinkedList LLobj = new LinkedList();ように置き換える必要がありますLinkedList<String> LLobj = new LinkedList<String>();

コードでジェネリックスを使用していないため、コンパイラーは警告を表示します。つまり、リストに保持する必要のあるオブジェクトのタイプです。コードでジェネリックスを使用しないことで、次のような任意のタイプのオブジェクトをリストに入力できます。LLobj.add(new Integer(10)); LLobj.add("ABC");

これにより、リストからどのタイプのオブジェクトが取得されるかわからないため、ClassCastExceptionが発生します。これは文字列または整数の場合があります。したがって、警告メッセージが表示されます。のような特定のタイプを使用することによりLinkedList<String> LLobj = new LinkedList<String>();、リストに文字列を追加することしかできないため、ClassCastExceptionはどの場所でも発生しません。

于 2013-03-24T14:03:33.883 に答える