【发布时间】:2021-11-07 11:08:00
【问题描述】:
我有一个用例来确定方法的返回类型是否为List 类型。为了检查返回类型,我使用了Class#isAssignable 方法并遇到了这种行为。
public class ObjectReturnType {
public static void main(String[] args) throws NoSuchMethodException {
Method method1 = ObjectReturnType.class.getDeclaredMethod("objectReturnType");
Class<? extends Object> returnType1 = method1.getReturnType();
if (returnType1.isAssignableFrom(List.class)) {
System.out.println("Yes it is.");
}
Method declaredMethod2 = ObjectReturnType.class.getDeclaredMethod("listReturnType");
Class<? extends Object> returnType2 = declaredMethod2.getReturnType();
if (returnType2.isAssignableFrom(List.class)) {
System.out.println("Yes it is.");
}
}
public Object objectReturnType() {
return null;
}
public List<String> listReturnType() {
return List.of("");
}
}
这两种方法都通过if 条件,我期望只有listReturnType 方法通过if 条件,不知道为什么objectReturnType 方法会通过if 条件。有人可以帮我理解这种行为吗?
【问题讨论】:
-
List可分配到Object,因此Object可分配来自List。这里没有错。你的意思是颠倒这两种类型吗?if (List.class.isAssignableFrom(returnType1)) -
试试
Class<?> object = Object.class, list = List.class; System.out.println(object.isAssignableFrom(list)); System.out.println(list.isAssignableFrom(object));
标签: java reflection