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

我相信您可以检查是否为TypeaParameterizedType并使用原始类型(如果是):

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<?>and 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 回答