Class的 getSuperclass与getGenericSuperclass区别
一、getSuperclass 返回直接继承的父类(由于编译擦除,没有显示泛型参数)
Class<? super T> |
getSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。 |
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。
如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。
如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象。
- 返回:
- 此对象所表示的类的超类。
二、getGenericSuperclass 返回直接继承的父类(包含泛型参数)
Type |
getGenericSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。 |
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type。
如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。
如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。
如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。
- 返回:
- 此对象所表示的类的超类
- 抛出:
GenericSignatureFormatError- 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式TypeNotPresentException- 如果常规超类引用不存在的类型声明MalformedParameterizedTypeException- 如果常规超类引用的参数化类型由于某种原因无法实例化
代码实例:

package cn.test;
public class Test {
public static void main(String[] args) {
System.out.println("Student.class.getSuperclass()\t"
+ Student.class.getSuperclass());
System.out.println("Student.class.getGenericSuperclass()\t"
+ Student.class.getGenericSuperclass());
System.out.println("Test.class.getSuperclass()\t"
+ Test.class.getSuperclass());
System.out.println("Test.class.getGenericSuperclass()\t"
+ Test.class.getGenericSuperclass());
System.out.println("Object.class.getGenericSuperclass()\t"
+ Object.class.getGenericSuperclass());
System.out.println("Object.class.getSuperclass()\t"
+ Object.class.getSuperclass());
System.out.println("void.class.getSuperclass()\t"
+ void.class.getSuperclass());
System.out.println("void.class.getGenericSuperclass()\t"
+ void.class.getGenericSuperclass());
System.out.println("int[].class.getSuperclass()\t"
+ int[].class.getSuperclass());
System.out.println("int[].class.getGenericSuperclass()\t"
+ int[].class.getGenericSuperclass());
}
}
class Person<T> {
}
class Student extends Person<Test> {
}

输出结果:
Student.class.getSuperclass() class cn.test.Person
Student.class.getGenericSuperclass() cn.test.Person<cn.test.Test>
Test.class.getSuperclass() class java.lang.Object
Test.class.getGenericSuperclass() class java.lang.Object
Object.class.getGenericSuperclass() null
Object.class.getSuperclass() null
void.class.getSuperclass() null
void.class.getGenericSuperclass() null
int[].class.getSuperclass() class java.lang.Object
int[].class.getGenericSuperclass() class java.lang.Object
Class的 getSuperclass与getGenericSuperclass区别的更多相关文章
- java Class的 getSuperclass与getGenericSuperclass区别
Class的getInterfaces与getGenericInterface区别 http://www.cnblogs.com/maokun/p/6773076.html 一.getSupercla ...
- getSuperclass与getGenericSuperclass区别
声明三个类class Person<T, V> {}class Teacher {}class Student extends Person<Student, Teacher> ...
- JAVA-反射-getGenericSuperclass()
1 public class Person<T> { 2 3 } 4 5 import java.lang.reflect.ParameterizedType; 6 import java ...
- 有关java反射的几个小方法的作用和区别
1.Class类中 getXXX()和getDeclaredXXX()的作用和区别: 前者获取某个类的所有公共(public)的字段(or方法or构造函数),包括父类.后者获取所有的字段(or方法or ...
- java中Class对象详解和类名.class, class.forName(), getClass()区别
一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到Java的反射----- Java反射学习 所谓反射,可以 ...
- 反射以及 getDeclaredMethods()和getMethods()区别
内容转载自http://blog.csdn.net/ljphhj/article/details/12858767 package cn.lee.demo; import java.lang.refl ...
- .class和.getClass()的区别
使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类 如: getClass() 返回此 Object 的运行时类. //需要有com.lpx.test.class这个类 Logger ...
- java反射获得泛型参数getGenericSuperclass():获取到父类泛型的类型
public class Person<T> { } import java.lang.reflect.ParameterizedType; import java.lang.reflec ...
- .getClass()和.class的区别
一直在想.class和.getClass()的区别,思索良久,有点思绪,然后有网上搜了搜,找到了如下的一篇文章,与大家分享. 原来为就是涉及到java的反射----- Java反射学习 所谓反射,可以 ...
随机推荐
- C#Razor模板引擎简单使用
引用 install-package RazorEngine 使用 public class TestDemo { private string name; public int Age { get ...
- 如何恢复已禁用的console.log?
如何恢复已禁用的console.log? How to Restore a Disabled console.log?通过将其拉出iframe,在已删除的页面(如twitter)上恢复console. ...
- 使用ODP.NET连接Oracle数据库
项目需要和第三方进行对接,奇葩的是地方没给提供接口,却提供了一个Oracle的视图 所以有了C#访问Oracle数据库的需求 1.打开nuget,安装驱动 https://www.nuget.org/ ...
- 动态 DP 学习笔记
不得不承认,去年提高组 D2T3 对动态 DP 起到了良好的普及效果. 动态 DP 主要用于解决一类问题.这类问题一般原本都是较为简单的树上 DP 问题,但是被套上了丧心病狂的修改点权的操作.举个例子 ...
- jmeter 学习笔记
beanshell内置对象 vars是针对单线程,使用${varName}访问var变量值 props是所有线程共享,使用${__P(propName,)}访问prop变量值 如何让variable在 ...
- 51nod 1201 整数划分 dp
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 收藏 关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2 ...
- The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
用过Mysql的人都知道,这个时区问题真个磨人的小妖精,哪天一忘记设置了就会出来磨磨你!!! 之前用的解决方法都是在Mysql的配置上添加与时区相关的配置,但是今天看到一篇博客:https://blo ...
- Linux 缩减逻辑卷
因工作需要,将/usr/users 空间从100G 缩小到50G 检查文件系统类型 mount | grep /usr/users 发现该文件系统使用的是 xfs ,逻辑卷为 /dev/appvg ...
- 简化kubernetes应用部署工具之Helm应用部署
介绍 微服务和容器化给复杂应用部署与管理带来了极大的挑战.Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的a ...
- linux逻辑卷管理(LVM)
1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...