之前用反射的时候,基本都是Class。最近弄生成接口文档工具的时候,又接触了一下ParameterizedType,偶然的机会发现两者居然有联系:顶级的接口都是Type。于是就统一整理下Type家族的东西。
Type是Java编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
- 原始类型:Class类的实例表示正在运行的Java应用程序中的类和接口。枚举是一种类,注解是一种接口。每个数组属于被映射为Class对象的一个类,所有具有相同元素类型和维数的数组都共享该Class对象。基本的Java类型(boolean、byte、char、short、int、long、float 和 double)和关键字void也表示为Class对象。
- 参数化类型:ParameterizedType表示参数化类型,如Collection<String>。
- 数组类型:GenericArrayType表示一种数组类型,其组件类型为参数化类型或类型变量。
- 类型变量:TypeVariable是各种类型变量的公共高级接口。
- 基本类型:就是我们所说的Java的基本类型,即int,float,double等。
此外,WildcardType表示一个通配符类型表达式,如?、? extends Number或? super Integer。
1、原始类型
Class是Type的一个实现类,属于原始类型,是Java反射的基础,对Java类的抽象。
在程序运行期间,每一个类都对应一个Class对象,这个对象包含了类的修饰符、方法、属性、构造等信息,所以我们可以对这个Class对象进行相应的操作,这就是Java的反射。
2、参数化类型
接口方法:
用法示例:
3、数组类型
接口方法:
用法示例:
4、变量类型
接口方法:
用法示例:
5、泛型表达式(通配符表达式)
接口方法:
用法示例: