检查一个类对象是否是 Java 中另一个类对象的子类

2022-08-31 05:40:37

我正在使用Java的反射API,并试图处理一些字段。现在,我只能确定字段的类型。字符串很容易,只需做。这同样适用于其他非派生类。但是,如何检查派生类呢?例如: 作为 的子类。我找不到任何或方法。我需要走遍所有并自己找到我的上级吗?myField.getType().equals(String.class)LinkedListListisSubclassOf(...)extends(...)getSuperClass()


答案 1

您需要此方法:

boolean isList = List.class.isAssignableFrom(myClass);

一般而言,(上文)应替换为,并应替换为ListsuperclassmyClasssubclass

来自 JavaDoc

确定此对象所表示的类或接口是否与指定参数所表示的类或接口相同,或者是否是其超类或超接口。如果是这样,它将返回;否则,它将返回 。如果此对象表示基元类型,则如果指定的参数正是此对象,则此方法返回;否则,它将返回 。ClassClasstruefalseClasstrueClassClassfalse

参考:


相关:

a) 检查对象是否是您在编译时知道的类或接口(包括子类)的实例:

boolean isInstance = someObject instanceof SomeTypeOrInterface;

例:

assertTrue(Arrays.asList("a", "b", "c") instanceof List<?>);

b) 检查对象是否是您仅在运行时知道的类或接口(包括子类)的实例:

Class<?> typeOrInterface = // acquire class somehow
boolean isInstance = typeOrInterface.isInstance(someObject);

例:

public boolean checkForType(Object candidate, Class<?> type){
    return type.isInstance(candidate);
}

答案 2

另一个选项是实例:

Object o =...
if (o instanceof Number) {
  double d = ((Number)o).doubleValue(); //this cast is safe
}