2012-02-25 12 views
2

私は例として、これら2つのクラスを持っている:Tのジェネリック型のインスタンス化?

public class AClass { 
    public int i; 
    public static int static_i; 

    public AClass(int i) { 
    } 

    public void aMethod() {} 

    public static void aStaticMethod() {} 

    public static AClass getInstance(int i) { 
      return new AClass(i); 
    } 
} 

public class AnOtherClass<T extends AClass> { 
    T aMember; 

    public void method() { 
     // Instanciation of T failed 
     aMember = new T(0); 

     // Instanciation via getInstance static method failed 
     aMember = T.getInstance(0); 

     // OK 
     T.aStaticMethod(); 
     // OK 
     aMember.aMethod(); 
    } 
} 
  1. インスタンス化に失敗しました: "タイプTをインスタンス化することはできません"
  2. インスタンスのgetInstance静的メソッドを介して失敗しました: "タイプの不一致:AClassからTに変換できません "
  3. どうしてですか?なぜ私はあなたがこれを行うことができないのか分かりません。
  4. なぜTはAClassのサブクラスなので、AClassをTに変換できないのですか?
+0

http://stackoverflow.com/questions/2434041/instantiating-generics-type-in​​-java http://stackoverflow.com/questions/2116404/java-generics-why-this-wont-work http:///stackoverflow.com/questions/1090458/instantiating-a-generic-class-in-java –

答えて

4

ジェネリックをインスタンス化することはできません。覚えておいてください - AnOtherClass<MyAbstractClass>を作成することができます[はAClassを拡張する抽象クラスです]、それをインスタンス化しようとするとどうなりますか?

しかし、既に存在するクラス/インスタンスのメソッドを呼び出すのに問題はありません。

あなたはmethod()Tを渡し、あなたはまだオブジェクトを作成、またはfactory design patternを使用したい場合は、それを回避するためにreflectionを使用してインスタンスを作成する必要があるかもしれません。

+0

「MyAbstractClass」に関するコメントは無関係です。クラスオブジェクトとして 'MyAbstractClass.class'を均等に渡すことができ、それと同等に作成できません – newacct