getSuperclass() 返回当前类的直接父类Class对象,若为Object、接口、基本类型或数组则返回null;返回值不含泛型信息,需用getGenericSuperclass()获取泛型父类;调用前应判空以防NPE。

Java 中通过 getSuperclass() 方法可以直接获取当前类的直接父类的 Class 对象,前提是该类不是 Object、不是接口、也不是基本类型或数组类型。
getSuperclass() 的基本用法
调用对象的 getClass().getSuperclass() 或直接在 Class 对象上调用 getSuperclass(),即可返回其直接父类的 Class 实例:
- 如果当前类是
Object,返回null - 如果当前类是接口、基本类型(如
int.class)、数组类型(如int[].class),也返回null - 对于普通类(如继承自
ArrayList的子类),返回其直接父类的Class
常见使用示例
比如定义一个类继承自 ArrayList<String>:
class MyList extends ArrayList<String> {}
然后获取其父类 Class:
立即学习“Java免费学习笔记(深入)”;
-
MyList.class.getSuperclass()→ 返回ArrayList.class -
ArrayList.class.getSuperclass()→ 返回AbstractList.class -
Object.class.getSuperclass()→ 返回null
注意泛型擦除的影响
getSuperclass() 返回的是运行时的原始父类类型,不包含泛型信息。例如 ArrayList<String>.class.getSuperclass() 仍是 AbstractList.class,而非带泛型的类型。若需获取泛型父类(如 AbstractList<String>),应使用 getGenericSuperclass() 配合 Type 处理。
安全调用建议
为避免空指针异常,建议判空后再操作:
- 先检查
clazz.getSuperclass() != null - 再调用
getName()、getSimpleName()或继续反射操作 - 尤其在遍历继承链时,循环条件应以
superClass != null控制


















