Java-Type体系

本文详细介绍了Java泛型中的ParameterizedType、GenericArrayType、TypeVariable、Class和WildcardType的概念及用法,包括如何获取泛型的实际类型、泛型数组类型、类型变量的上限、泛型的拥有者以及通配符表达式的边界。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.ParameterizedType
参数化类型,既泛型,例如List<T>, Set<T>等
1.1 getActualTypeArguments
获取泛型中的实际类型,可能会存在多个泛型,例如Map<K,V>,所以会返回Type[]数组;
注意:无论<>中有几层嵌套(List<Map<String,Integer>),getActualTypeArguments()方法永远都是脱去最外层的<>(也就是List<>),将<>内的内容(Map<String,Integer>)返回。
若是List<T>,通过该方法获取的是TypeVariable类型

1.2 getRawType
获取声明泛型的类或者接口,也就是泛型中<>前面的那个值。

1.3 getOwnerType
 获取泛型的拥有者,即获取内部类的拥有者,例如:Map就是Map.Entry<String, String>的拥有者.
 
 2. GenericArrayType
 泛型数组类型,如:List<String>[], T[].
 2.1 getGenericComponentType
 返回泛型数组中元素的Type类型,即List<String>[] 中的 List<String>(ParameterizedTypeImpl)、T[] 中的T(TypeVariableImpl);
 注意:无论是几维数组,getGenericComponentType()方法都只会脱去最右边的[],返回剩下的值;
 
3. TypeVariable
泛型的类型变量,指的是List<T>、Map<K,V>中的T,K,V等值,实际的Java类型是TypeVariableImpl(TypeVariable的子类);此外,还可以对类型变量加上extend限定,这样会有类型变量对应的上限;

3.1 getBounds
获得该类型变量的上限,也就是泛型中extend右边的值;例如 List<T extends Number> ,Number就是类型变量T的上限;如果我们只是简单的声明了List<T>(无显式定义extends),那么默认为Object.
注意:,类型变量的上限可以为多个,必须使用&符号相连接,例如 List<T extends Number & Serializable>;其中,& 后必须为接口;

3.2 getGenericDeclaration
获取声明该类型变量实体,也就是TypeVariableTest<T>中的TypeVariableTest;

3.3 getName
获取类型变量在源码中定义的名称

4.Class
Type接口的实现类,是我们工作中常用到的一个对象;在Java中,每个.class文件在程序运行期间,都对应着一个Class对象,这个对象保存有这个类的全部信息;因此,Class对象也称之为Java反射的基础

5.WildcardType
?---通配符表达式,表示通配符泛型,但是WildcardType并不属于Java-Type中的一钟;
5.1 getUpperBounds
获取泛型变量的上边界(extends)

5.2getLowerBounds
获取泛型变量的下边界(super)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值