2016-10-17 11 views
1

私はタイトルがかなり乱雑であることを知っていますが、この問題をちょっとした言葉で説明する方法はわかりません。Javaジェネリックメソッド一般的な内部クラスを返す方法

てみましょう:

public class A<T> { 
    T foo; 
    public A(T foo) { 
     this.foo = foo; 
    } 

} 

public class B { 
    public A<T> getA() { 
     ... 
    } 
} 

さて、obviuslyそのBの方法でもコンパイルされません。ポイントは、返すBクラスのメソッドとクラスAがそのメソッドに何らかの形で渡されなければならないAクラスが必要なことです。このメソッド内でTのインスタンスを作成してAのインスタンスを返すことができます(AClassはは、不明である、それは文句、と明らかにそれは右...)だから、

、私はどのように渡すことができ

public A getA(Class aClass) { 
    return new A<aClass> ... 
} 

しかし、それがすべてではコンパイルされません。

は、私のような何かを試してみましたAのインスタンスを作成するために、そのメソッドのクラスT?

私の質問を理解していただければ幸いです。事前に

どうもありがとう、

答えて

0

あなたの非一般的な実装は、修正のための青写真を持っています:これは構文です

public <T> A<T> getA(Class<T> tClass) { 
//  ^^^ ^^^   ^^^ 
    return new A<T>(tClass.newInstance()); // Assumes T has a default constructor 
} 
+0

あなたが正しい@marstran、 'AClassは:これまでこの

public A getA(Class aClass) { return new A<aClass> ... } 

を変更'は実際に' A'ではなく 'T'のクラスなので、' A'でも 'new'が必要です。ありがとうございました! – dasblinkenlight

+0

誰がコメントを削除しましたか? – marstran

+0

@Franそして、これはかなり悪い解決策です。それは、反射を全く必要としてはいけないもののために反射を使用します。また、 'T'には引数なしのコンストラクタがあると仮定しています。これはあなたが全く確信できないものです。 – marstran

0

あなたは、あなたの関数の型パラメータを必要としています。 Aのコンストラクタのパラメータも必要であることに注意してください。

public <T> A<T> getA(T t) { 
    return new A<>(t); 
} 
関連する問題