<?>
リストにオブジェクトを追加することはできません。以下のプログラムを参照してください。method に渡した特定のタイプのリスト<?>
です。具体的には、 list が特定の型で作成され、 method
に渡されたことを意味します。単語と混同しないでください。特定は、Dog、Tiger、String、Object、HashMap、File、Integer、Long などの通常のオブジェクトにすることができ、リストは無限です。objectを含むリストを定義した (呼び出しメソッドではなく呼び出しメソッドで定義) と、呼び出されたメソッドにadd anyを実行しないメソッドを強制します。
「触るな」と言っているようなものです。<?>
listAll
specific
JLS
<?>
irrelevant objects
<?>
called-listAll
specific type
<?>
public static void listAll(LinkedList list)
{
list.add(new String()); //works fine
for(Object obj : list)
System.out.println(obj);
}
public static void listAll(LinkedList<?> list)
{
list.add(new String()); //compile time error. Only 'null' is allowed.
for(Object obj : list)
System.out.println(obj);
}
次に、別のシナリオを見てみましょう。Dog、Tiger、Object、String などの特定の型を宣言するとどうなるでしょうか。メソッドを に変更しましょうspecific type
。
public static void listAll(LinkedList<String> list)// It is now specific type, 'String'
{
list.add(new String());//works fine. Compile time it knows that 'list' has 'String'
for(Object obj : list)
System.out.println(obj);
}