ジェネリクスの罠。
どえらい勘違いをしていた。
class A{} class B extends A{} List<A> list = new ArrayList<A>(); list.add(new B());
ができないと思っていた。
ワイルドカード使おうとしても
class A{} class B extends A{} List<? extends A> list = new ArrayList<? extends A>(); list.add(new B());
だとコンパイルエラーになるし、どうしたものかとかなり長いこと悩んでたのに(笑)
List<A> list = new ArrayList<A>(); // <= OK List<A> list = new ArrayList<B>(); // <= NG List<? extends A> list = new ArrayList<B>(); // <= OK List<A> list = new ArrayList<A>(); list.add(new B()); // <= OK
てなことなんだね。