2012-02-08 15 views
1

これはなぜ機能しませんか?汎用クラスの新しいインスタンスを作成する

class MyClass<GenericClass> { 
    GenericClass myInstance; 

    MyClass() { 
    myInstance = new GenericClass(); 
    } 
} 

「新しい」に「COMPILE時間エラー」メッセージをインスタンス化できません。たとえパラメータのないコンストラクタがあることを確認しても。


フォローアップ:これに対処する方法がありますか?それとも私は私がそれ以外ではMyClassの実施を明らかにすることを強制していますので、素晴らしいされていないMyClassの<>

class Other { 
... 
... 
} 

MyClass<Other> mine = new MyClass<Other>(); 
mine.setMyInstance(new Other()); 

にsetMyInstance()メソッドを追加したと仮定すると(これを行うことを余儀なくしています。

それを処理するためのより良い方法何

答えて

2

二つの単語:?!type erasure

typeパラメータの具体的な値は実行時には利用できないため、インスタンス化する型を知る方法はありません。さらに、呼び出し可能な引数なしのコンストラクタがあるという保証はありません。

+0

コンパイル時にエラーが発生しました... – pitosalas

+3

これがポイントです。実行時に型パラメータにアクセスすることができないため、コンパイル時にこのコードを記述することは禁じられています。 –

関連する問題