Set<E>
のメソッド宣言を見てみましょう。コンパイル時の汎用型チェック
public boolean add(E e);
public E get(int index);
これを試してみましょう。
List<Boolean> list = new ArrayList<Boolean>();
Integer i = list.get(0); //Predictably, here we get a compile error.
list.contains(new Integer(3)); //But this line is allowed. Why?
私が知っているように(このコードは単純にそのコードに変換されます)、このコードの非ジェネリックであっても、両方の行にコンパイルエラーが発生します。
List s = new ArrayList();
s.contains((Boolean)(new Integer(3)));
Integer i = (Boolean)s.get(3);
なぜ、一般的なケースでエラーが発生しますか?