-1

Java の一般的なワイルドカードを理解しようとしています。基本的なプログラムに出くわしました。リスト s に追加できるのは「null」だけのようです。たとえば、追加することはできません

s.add(new Integer (4)); 

OR

s.add(new Char(a));

多くの資料を読んで頭を混乱させる前に、ジェネリックにワイルドカードを導入することで Java 設計者がどこに向かっているのかを理解しようとしています。私の経験不足とJavaの初心者のため、人々がこの問題について考えを共有できれば幸いです。

import java.util.LinkedList;
import java.util.Iterator;

public class WildCardExampleOne {

    public static void main(String[] args)
    {
        LinkedList<?> s = new LinkedList<Integer>();
        s.add(null);

        Iterator<?> x = s.iterator();

        Object o = x.next();

        System.out.println(o);

        /* note that LinkedList<?> is NOT the same type as LinkedList<Object>
         * here are some statements that wouldn't compile:
         */
        // s.add(new Integer(3)); 
        // Iterator<Object> x = s.iterator();
    }
}
4

4 に答える 4

6

リスト s に追加できるのは「null」だけのようです。

はい、これは正しいです。ただし、要素を追加する必要のない (そして追加することを想定されていない) リストを受け取ることがよくあります。たとえば、リストの要素を 1 行に 1 つずつ標準出力に出力する単純なメソッドを考えてみましょう。

public static void printAll(final List<?> list) {
    for (final Object elem : list) {
        System.out.println(elem);
    }
}

このメソッドは、リストの要素の型が何であるかを知る必要はありません。List<String>a 、 an ArrayList<Integer>、 a LinkedList<Object>、またはその他で呼び出すことができますList<?>

于 2013-08-09T01:57:25.733 に答える
2

ワイルドカードを使用してジェネリック クラスを直接インスタンス化することはありません。extendsまたはと組み合わせて使用​​しますsuper

于 2013-08-09T01:55:48.110 に答える