Prev / Next / たまにっき。

Generics

Category: [Java]
2006-06-28

J2SE 1.4 で書いたやりたいこと

Class fooClass = Class.forName("Foo");
Foo fooObject = (Foo)fooClass.newInstance();


これを generics を使ってスマートに書きたい.

案1

Class<Foo> fooClass = (Class<Foo>)Class.forName("Foo");
Foo fooObject = fooClass.newInstance();


キャストが入っている時点で generics をスマートに使っていない.

案2

Class<?> fooClass = Class.forName("Foo");
Foo fooObject = fooClass.newInstance();


コンパイルエラー.? と Foo は互換じゃない.

で煮詰まって検索してみたところ,こう書くことができるようだ

Class<?> clazz = Class.forName("Foo");
Class<? extends Foo> fooClass = clazz.asSubclass(Foo.class);
Foo fooObject = fooClass.newInstance();



他にも,こんな書き方も可能なようだ.

Class<?> clazz = Class.forName("Foo");
Class<? extends Foo> fooClass = clazz.asSubclass(Foo.class);
Foo fooObject = fooClass.cast(clazz.newInstance());


Category: [Java]