在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。)