私はジェネリックメソッドを持っていますが、どのようにしてTのクラスを取得できますか?ジェネリックメソッドのジェネリック型のクラスインスタンスを取得する方法
class MyClass
{
static <T> void foo(T t)
{
// how to get T.class
}
}
t.getClass()は、ほとんどの派生クラスを取得しますが、それはMyClassの場合には動作しませんので、Tは、スーパークラスである可能性があります。 <コレクション> foo(新しいArrayList())。
を呼び出します。タイプ消去について読んでください。あなたができる最善の方法は、別のパラメータ 'Class clazz'をメソッドに追加することです。 –
この場合、 'T'はコンパイル時に' Object'です。したがって、 'Object.class'がトリックを行います。さもなければ、 't.getClass()'はどうでしょうか? P.S.誰にもこれは消去と何か関係があると言ってもらえません。そうではありません。あなたは 'T'の境界を定義していません。 –
'' 'T'''は_weak_型ですが、' '' 'getClass()' 'は_strong_型のクラスを返します。 [この質問]を参照してください(http://stackoverflow.com/questions/106336/how-do-i-find-out-what-type-each-object-is-in-a-arraylistobject) –