1.8_1 自省继承层次

getSupperClass 仅仅是 Class 提供的继承相关的反射方法之一,还有其他方法如下表所示:

方法 说明
Class[] getInterfaces() 返回表示 直接接口Class 对象数组
Class[] getSuperclass() 返回表示 直接父类Class 对象,若调用对象为 Object interface primitive void 则返回 null
boolean isAssignableFrom(Class cls) 若调用对象(类、接口)是 cls 的父类或同为 cls 类,则返回 true
boolean isInstance(Object obj) obj 是调用对象类的 实例,返回 true

getInterfaces 方法返回接口,调用该方法的 Class 对象有两种情况:

  • 调用 Class 对象表示 普通类,则返回 implements 关键字后面的接口。
  • 调用 Class 对象表示 接口,则返回 extends 关键字后面的接口。

getInterfacesgetSuperclass 方法与 Java 概念稍有不同,在 Java 中,只有在 继承树 可达,即为父类,但在反射 API 中,getSuperclass 返回的是 extends 关键字后面的父类,即 直接父类getInterfaces 同样也仅返回直接接口。

使用 Class.isAssignableFrom 判断一个类是否是另外一个类的 子类/父类

// 是否可用 y 的实例对 x 实例赋值? x = ys
x.isAssignableFrom(y);

下面是一些例子:

// true
Object.class.isAssignableFrom(String.class);
java.util.List.class.isAssignableFrom(java.util.Vector.class);
double.class.isAssignbaleFrom(double.class);

// false
Object.class.isAssignbaleFrom(double.class);
// true
Object.class.isAssignbaleFrom(Double.class);
  • double 是原始类型,其值不能赋值给 Object 类对象。
  • Double 是原始类型的包装类,父类为 Object

isInstance 是 Java 中 instanceof 关键字的反射版本,看下面的例子:

ClassObject.isInstanceof(InstanceObject);
  • ClassObject普通类,则若 InstanceObject 类型为 ClassObject 或其 子类,返回 true
  • ClassObject接口,则若 InstanceObject 的类 实现 ClassObject 接口或其 子接口,返回 true

results matching ""

    No results matching ""