web-dev-qa-db-ja.com

ジェネリック型がインスタンス化できないのはなぜですか?

これが私の質問です。

class Gen<T> {
    T ob;
    Gen() {
        ob = new T(); // Illegal!!!
    }
}

なぜ違法なのですか?説明していただけませんか。

7
alakhya

これは次の2つの理由により不可能です。

  1. Tが引数なしのコンストラクターを持っているという保証はありません(そのため、インターフェイスや抽象クラスではありません)。
  2. 型の消去(後方互換性のために必要)のため、Tの型はコンパイル時にはわかっていますが、実行時にはわからないため、何を構築するかはわかりません。

答えは、コンストラクターでTファクトリーを取ることです。次に、Genは新しいTをその中心コンテンツに要求できます。

14
Richard Tingle