Java中的Type

Type是Java 编程语言中所有类型的公共高级接口,这是官方解释。也就是Java中所有类型的父类;其中,“所有类型”并不是我们平常工作中经常使用的 int、String、List、Map等具体的数据类型,而是从Java语言角度来说,对基本类型、引用类型向上的抽象。
Type体系中类型的包括:原始类型(Class类)、参数化类型(ParameterizedType接口)、数组类型(GenericArrayType接口)、类型变量(TypeVariable接口)、通配符类型(WildcardType接口);

这里写图片描述
Type在jdk1.8中只定义了一个方法,通过多态提高了程序的扩展性,共有5个子类或子接口实现了Type接口。如下:
1)Class类
Class很常见,也是Type的一个实现类,属于原始类型,是Java反射的基础,对Java类的抽象。在程序运行期间,每一个类都对应一个Class对象,这个对象包含了类的修饰符、方法,属性、构造等信息,所以我们可以对这个Class对象进行相应的操作,这就是Java的反射。
Class类的对象表示JVM中的一个类或接口,每个Java类在JVM里都表现为一个Class对象。在程序中通过“类名.class”、“对象.getClass()”或是“Class.forName(“类名”)”等方式获取Class对象。数组也会被映射成一个Class对象,所有元素类型相同且维数相同的数组都共享一个Class对象。
2)GenericArrayType
这里写图片描述
泛型数组类型,用来描述ParameterizedType、TypeVariable类型的数组;即List[] 、T[]等;
Type getGenericComponentType(); // 获得这个数组元素类型,即获得A(A[]) 或T(T[])

3)ParameterizedType
参数化类型,即泛型;例如:List < T >、Map < K, V >等带有参数化的对象
这里写图片描述
Type[] getActualTypeArguments(); 获取参数列表,如Map< String,Object >中的String和Object
Type getRawType(); 返回参数化类型中的原始类型,如List< String >的原始类型为List
Type getOwnerType(); 获得该类的拥有者,如拥有内部类的外部类
4)TypeVariable
类型变量,即泛型中的变量;例如:T、K、V等变量,可以表示任何类;在这需要强调的是,TypeVariable代表着泛型中的变量,而ParameterizedType则代表整个泛型。
这里写图片描述
Type[] getBounds(); 获得泛型的上限,若无显示定义(即没有extends),则默认为Object
D getGenericDeclaration(); 获取声明该类型的变量实体(即获得类、方法或构造器名)
String getName(); 获得名称,即K、V、E等名称
AnnotatedType[] getAnnotatedBounds();

5)WildcardType
泛型表达式(或者通配符表达式),即? extend Number、? super Integer这样的表达式;WildcardType虽然是Type的子接口,但却不是Java类型中的一种
这里写图片描述
Type[] getUpperBounds(); 获得泛型表达式上界(上限extends)
Type[] getLowerBounds(); 获得泛型表达式下界(下线super)

以上就是java的Type体系。Java在1.5版本引入的Type接口,在1.5之前,Java中只有原始类型,有了Type后,扩展了Java的数据类型。

测试

1)测试ParameterizedType
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

2)测试TypeVariable
这里写图片描述
这里写图片描述
这里写图片描述

注意:在Java的Type体系中,有个很重要的接口GenericDeclaration,它是声明泛型的所有实体的公共接口,即要想定义泛型,则必须实现这个接口。通过查看源码得知,该接口的实现类和接口分别为:Class类,Executable抽象类(该抽象类共有两个子类:Constructor类和Method类)。也就是说,要自定义泛型,只能在三个地方定义:Class类上,类中的方法上、类的构造器上。我们平时在类的成员属性或者方法中的局部属性上“定义”的泛型,并不是真正定义,而只是使用而已。若类上没有定义泛型,在成员属性上使用泛型,则编译都通不过。
3)测试GenericArrayType
这里写图片描述
这里写图片描述

4)测试WildcardType
这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值