匹配方法在Java中将类型返回给类?

时间:2012-06-03 07:52:35

标签: java generics

我需要将方法返回的类型与类匹配。我怎么能这样做?

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?
        }       
    }

}

3 个答案:

答案 0 :(得分:5)

我相信您可以检查TypeParameterizedType并使用原始类型,如果是这样的话:

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的答案是一个很好的答案。

答案 1 :(得分:3)

如果您对List的类型参数不感兴趣,可以使用method.getReturnType().equals(List.class)来测试该方法是否返回List

但请注意,如果相关方法恰好返回false的子类型,则会返回List。 (感谢@cHao指出这一点!)如果您希望处理该案例,请改用List.class.isAssignableFrom(method.getReturnType())

答案 2 :(得分:0)

我认为你可以这样检查:

if(returnType instanceof List) {

}