2

メソッドが返すタイプをクラスに一致させる必要があります。どうやってやるの?

public class MethodTest {

    public static List<String> getStringList()
    {
        return null;
    }

    public static void main(String[] args)
    {
        for(Method method : MethodTest.class.getMethods())
        {
            Type returnType = method.getGenericReturnType();
            // How can for example test if returnType is class List?
        }       
    }

}
4

3 に答える 3

5

私はあなたが存在をチェックし、もしそうなら生のタイプを使うTypeことができると信じています:ParameterizedType

if (returnType instanceof ParameterizedType)
{
    System.out.println("Parameterized");
    ParameterizedType parameterized = (ParameterizedType) returnType;
    System.out.println(parameterized.getRawType().equals(List.class));
}
else
{
    System.out.println("Not parameterized");
    System.out.println(returnType.equals(List.class));
}

これはとに対応しList<?>ますListが、の具体的な実装を返すように宣言されたメソッドとは一致しませんList。(isAssignableFromそのために使用します。)

戻り型のジェネリック型引数などについて他に何も使用しない場合は、missingfaktorの答えが適切であることに注意してください。

于 2012-06-03T07:58:53.180 に答える
3

Listの型パラメータに関心がないmethod.getReturnType().equals(List.class)場合は、メソッドがを返すかどうかをテストするために使用できますList

ただしfalse、問題のメソッドがたまたまのサブタイプを返す場合、これが返されることに注意してくださいList。(それを指摘してくれた@cHaoに感謝します!)そのケースを処理したい場合は、List.class.isAssignableFrom(method.getReturnType()) 代わりに使用してください。

于 2012-06-03T07:55:14.830 に答える
0

私はあなたがこのようにチェックできると思います:

if(returnType instanceof List) {

}
于 2012-06-03T08:39:04.177 に答える