menu
書いてる野郎
orebike@gmail.com
誰しもが考える new T();
問題である。
スマートにはできないし、やるような状況も無いという結論。
挙動としてジェネリクスの型パラメータは文法上の整合性を確認した後に、コンパイル時には削除されてしまう。 なのでそもそも型パラメータを型として内部で使うことはできないという仕様になっている。当然 new などできない。
インスタンスとしては Object もしくは指定されたスーパークラス、インターフェース実装として振る舞うことになる。 なので、型パラメータは入れ物としてだけ、それに渡されるインスタンスはインスタンスという何か塊(もしくは特定用途専用の何か)としてだけハンドリングされることを想定している。
コレクション系のクラスでジェネリクスが多用され、通常の設計ではあまり用いられないのはこのような性質が関係している。