2009-08-30 4 views
11

私はJavaでこのような何かをしようとしている:Javaでテンプレート(汎用)パラメータのタイプを見つける方法はありますか?

public static <T> T foo() { 
    return (T) bar(T); 
} 

public static Object bar(Class<?> klaz) { 
    return klaz.newInstance(); 
} 

をしかし、私はクラス<>ため Tを代用することはできませんので、コードはコンパイルされません?。具体的なクラスで
は、私のようなバーを呼び出すことができます。

bar(ConcreteClass.class); 

しかし、同じことが Tでは動作しません。すなわち T.class

のようなものは、コンクリートやテンプレートタイプの両方のための typeofの作品は、C#ではありません。したがって、barへの呼び出しは、次のようになりました。

bar(typeof(T)); 

しかし、私はJavaで同様のものを見つけることができませんでした。

私に何か不足していますか、またはJavaはテンプレートパラメータのタイプを取得する方法がありませんか? Javaにこの機能がない場合、回避策はありますか?

答えて

14

タイプを取得する方法はありません。 Javaのジェネリックスは型消去を使用するので、Java自体も実行時にTが何であるか分からない。

回避策:fooを定義して、タイプがClass<T>のパラメータを使用し、それを使用できます。

関連する問題