2009-07-31 4 views
2
私はこのようなクラスのすべての取得すべてのメソッドを取得するためにリフレクションを使用しています

:私はメソッドを持っている場合:私は方法例えば検査によって戻り値の型のパラメータ化された型を見つける方法は?

for (Method m: allMethods){ 
    //I want to find out if the return is is a parameterized type or not 
    m.getReturnType(); 
} 

を反復処理しています。その後

Method[] allMethods = c.getDeclaredMethods(); 

をこのような:

public Set<Cat> getCats(); 

はどのようにしてパラメータ化された型としてCatが含まれている戻り値の型を見つけるためにリフレクションを使用することができますか?

答えて

8

getGenericReturnType()を試しましたか?

Methodオブジェクトで表されるメソッドの正式な戻り値の型を表すTypeオブジェクトを返します。

戻り値の型がパラメータ化された型の場合、返される戻り値のオブジェクトは、ソースコードで使用されている実際の型パラメータを正確に反映している必要があります。

戻り値の型が型変数またはパラメータ化された型の場合、その型が作成されます。それ以外の場合は解決されます。 (のJavadocを見てから)次に

、あなたがParameterizedTypeにキャストし、その上にgetActualTypeArguments()を呼び出す必要がありますようです。

は、だからここにいくつかのサンプルコードです:

for (Method m : allMethods) { 
     Type t = m.getGenericReturnType(); 
     if (t instanceof ParameterizedType) { 
      System.out.println(t);  // "java.util.Set<yourpackage.Cat>" 
      for (Type arg : ((ParameterizedType)t).getActualTypeArguments()) { 
       System.out.println(arg); // "class yourpackage.Cat" 
      } 
     } 
    } 
+0

うん、このアプローチは動作します。 getActualTypeArguments()[0]をClassにキャストするだけで、getNameを呼び出すことができます。ありがとう。 –

関連する問題