なぜ型パラメータのインスタンスを作成することはできませんか?

アビシェークKeshri:

Javaでは、インスタンスの作成type次のコードは動作しませんので、パラメータは、違法です:

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

この背後にある理由は次のとおりです。

Tは、オブジェクトの種類コンパイラのノウハウを作成するだろうか、その後、実行時には存在しません。

しかし、私が使用して、あることを理解しない何をerasureするために変換されます、次のコードを:

class Gen {
    Object ob;
    Gen() {
        ob = new Object(); // Perfectly Fine!!!
    }
}

理由は次のとおりです。

Javaコードをコンパイルすると、すべての一般的なタイプの情報を削除(消去)されます。である彼らのバウンドタイプ、との型パラメータを交換する。この手段Objectは明示的な境界が指定されていない場合。

なぜインスタンス化typeパラメータは違法でしょうか?

GhostCat敬礼モニカC.:

シンプル:それはので、T何でもかまいません。

あなたが持っていると仮定Gen<Integer>サプライズ:整数んではないデフォルトコンストラクタを持っています。それでは、どのようにするつもりですnew Integer()、その後?

コンパイラはできません知っているようにしていなことのためにデフォルトコンストラクタがあるかどうかT

java.lang.Object 明らかに、このようなコンストラクタを持っています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=183695&siteId=1