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

在Java中将方法返回类型与类匹配?,java,generics,Java,Generics,我需要将方法返回的类型与类匹配。我该怎么做 public class MethodTest { public static List<String> getStringList() { return null; } public static void main(String[] args) { for(Method method : MethodTest.class.getMethods())

我需要将方法返回的类型与类匹配。我该怎么做

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

}
公共类方法测试{
公共静态列表getStringList()
{
返回null;
}
公共静态void main(字符串[]args)
{
对于(方法:MethodTest.class.getMethods())
{
类型returnType=method.getGenericReturnType();
//例如,如何测试returnType是否为类列表?
}       
}
}

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


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

我相信您可以检查
类型是否为
参数化类型,如果是,请使用原始类型:

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));
}
这将处理
列表
列表
,但它不会匹配声明为返回
列表
的具体实现的方法。(请使用
isAssignableFrom


请注意,如果您不打算使用关于返回类型的泛型类型参数等的任何其他内容,那么missingfaktor的答案是好的。

我认为您可以这样检查:

if(returnType instanceof List) {

}

我不是100%确定你在问什么,但“instanceof”可能是适用的:不。
obj instanceof cls
instanceof
的工作原理。OP需要的是比较两个
Class
对象。我知道这个问题是。例如,如何测试returnType是否为类列表?这就是我认为他想知道的。如果是这样的话,这是真的。@Unni:事实是,returnType是
类型
的实例,而不是该方法的返回类型的实例
instanceof
无法实现您的期望。(即:
returnType instanceof Class
returnType instanceof Type
(取决于获取返回类型的方法)将返回true,而
returnType instanceof List
将返回false。)