2009-07-07 7 views
4

編集 私が求めているものを理解していなかった多くのdownvotesし、人々があったので、私は言い換えます:Tクラスは汎用クラス<T>は別のクラスから割り当て可能ですか?

を私はfooがから汎用化されたクラスが何であるかを実行時に見つけるにはどうすればよいです?

public boolean doesClassImplementList(Class<?> genericClass) 
{ 
    // help me fill this in 
    // this method should return true if genericClass implements List 
    // I can't do this because it doesn't compile: 
    return genericClass instanceof List; 
} 
+0

-1。そして、2行のコードで答えることができるもの。 – kdgregory

+0

私は答えを知っていれば答えられるかもしれませんが、私はそうではなく、私はクラスのドキュメントを見て、見つけられませんでした。 – ripper234

+0

コンパイルした例を書いた方が答えが出ます。 foo = Integer.classで始まり、そこから進みます。 – kdgregory

答えて

9

Class.isAssignableFrom

+0

私は今それを得る、それは本当に愚かな質問です。 Javaのジェネリックの概念は私を混乱させていると思います。私はまだそれに慣れていない(.Netsとは対照的に)。 – ripper234

0

は、Java(type erasure

+0

何か??????? (コメントには少なくとも15文字必要です)。 – ripper234

0

にあなたはClassオブジェクトを生成するにClass.forName( "fully_qualified_name")を使用して、またはすでにインスタンス化されたオブジェクト上の.getClass()メソッドを使用する必要がありますすることはできません。また、int型の場合、クラスはInteger.TYPEプロパティで定義されます。

あなたがしようとしていることをもう少し明確にする必要があります。同じタイプに一致していますか?いくつかの方法を使うことができますが、最終目標は何ですか?

今、あなただけの

public boolean doesClassImplementList(Class genericClass) 
{ 
    // help me fill this in 
    // this method should return true if genericClass implements List 
    // I can't do this because it doesn't compile: 

    //this will give you a a list of class this class implements 
    Class[] classesImplementing = genericClass.getInterfaces(); 

    //loop through this array and test for: 
    for(int i=0; i<classesImplementing.length; i++) { 
    if (classesImplementing[i].getName().equals("java.util.List")) { 
    return true; 
    } 
    } 
    return false; 
} 
+0

質問者は実際には "質問"の中でInteger.classを使用します。 –

+0

あなたの答えは私よりもはるかにいいです:) –

+0

ニースのループ。なぜ使用しなかったのですか?List.class.isAssignableFrom(genericClass);代わりに? Tom - 質問でInteger.classへの参照はありません。 – JeeBee

0

Class<Integer>は型宣言..ですクラスを渡す... HERESに...いくつかの助けを明らかにしてきた、あなたはそれを変数に割り当てることができないこと、[OK]をあなたの最初の行でやっているように。

Class<Integer>は基本的にInteger型を参照する方法なので、パラメータとして渡すことができます。それはいくつかのメソッド(キャストなど)に影響しますが、基本的にメソッドにジェネリックパラメータを提供し、それをタイプに関連付ける方法です。例えば

:コンパイルされない例を投稿するための

public <T> T someMethod(Object someObject, Class<T> castTo) { 
    return castTo.cast(someObject); 
} 
関連する問題