1

Javaのジェネリックの概念を理解しています。次のコード行を理解できません。

import java.util.List;
import java.util.ArrayList;


public final class Main {
    public static final void main(final String[] args) {
        final List<A> listA = new ArrayList<Main.A>();
        //listA.add(new Main.B()); // i understood why this line is an error.

        final List<List<A>> listListA = new ArrayList<List<A>>();
        listListA.add(new ArrayList<Main.A>());
        // Why the above line doesn't throws an error ?
    }

    private class A {
    }


    private final class B extends A {
    }
}
4

3 に答える 3

1

話しましょう。

この行ではfinal List<A> listA = new ArrayList<Main.A>()、タイプ A のオブジェクトを保持する を作成しましたArrayList。これは、各スロットが A を保持する配列と考えてください。

この行では、final List<List<A>> listListA = new ArrayList<List<A>>()も作成しますArrayListが、この場合、各スロットは A のリストを保持します。

listListA.add(新しいArrayList()); // 上記の行がエラーをスローしないのはなぜですか?

エラーがスローされない理由は、ステートメントが有効であるためです。ArrayList作成したリストの A (スロット内) を追加しています。

お役に立てれば。

于 2013-05-12T02:08:53.813 に答える
1

コードはエラーなしで正常にコンパイルされます。この行listListA.add(new ArrayList<Main.A>());は有効な Java ステートメントであるため、エラーをスローしません。

于 2013-05-12T02:21:43.417 に答える