それでも意味はある
public staticT createHoge(Class hogeType) { return (T)hogeType.newInstance(); // せめて、キャスト無しにT.newInstance()って書きたいな } パラメタが無駄だし冗長だが我慢しよう。しかし、何よりジェネリクスを使っているのにキャストが必要なのが許せん。Tが何を表すかは自明じゃないか。
erasure
先日はJavaのジェネリクスなメソッドに対して厳しく書いたが、気に入らないからといって、これを非ジェネリクスなメソッドに戻してしまうと使う側は
Hoge hoge = (Hoge)createHoge();
と昔々の直キャストに戻る訳で、それこそジェネリクスサポートの意味が無いわけだ。
冗長ではあるが上のように書けば、
Hoge hoge = createHoge(Hoge.class);
と、パラメタは増えるがキャストが減らせる訳で、どちらが好きかといえば後者だ。
しかし、キャストを気に留めること自体、既に不毛なことなのかもしれないな。