我需要将方法返回的类型与类匹配。我怎么能这样做?
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?
}
}
}
答案 0 :(得分: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的答案是一个很好的答案。
答案 1 :(得分:3)
如果您对List
的类型参数不感兴趣,可以使用method.getReturnType().equals(List.class)
来测试该方法是否返回List
。
但请注意,如果相关方法恰好返回false
的子类型,则会返回List
。 (感谢@cHao指出这一点!)如果您希望处理该案例,请改用List.class.isAssignableFrom(method.getReturnType())
。
答案 2 :(得分:0)
我认为你可以这样检查:
if(returnType instanceof List) {
}