erasure

今更な不平。
C#ならAbstractHogeを拡張する型のジェネリックなファクトリは

public static T CreateHoge() where T : AbstractHoge, new()
{
    return new T();
}

とすっきり書ける。
Javaの場合、ジェネリクスはerasureなので同じ意味で書くためには一つ引数を増やす必要がある。

public static  T createHoge(Class hogeType) {
    return (T)hogeType.newInstance(); // せめて、キャスト無しにT.newInstance()って書きたいな
}

パラメタが無駄だし冗長だが我慢しよう。しかし、何よりジェネリクスを使っているのにキャストが必要なのが許せん。Tが何を表すかは自明じゃないか。