Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType


 (1). 和反射+泛型有关的接口类型

· java.lang.reflect.Typejava语言中所有类型的公共父接口

· java.lang.reflect.ParameterizedType

· java.lang.reflect.GenericArrayType

· java.lang.reflect.WildcardType

 

1. Type直接子接口

ParameterizedTypeGenericArrayTypeTypeVariableWildcardType四种类型的接口

· ParameterizedType:表示一种参数化的类型,比如Collection

· GenericArrayType:表示一种元素类型参数化类型或者类型变量数组类型

· TypeVariable: 各种类型变量公共父接口

·WildcardType: 代表一种通配符类型表达式,比如?, ? extends Number, ? super Integerwildcard是一个单词:就是通配符

·  

2. Type直接实现子类 :Class类

3.java.lang.reflect.Type接口

Type所有类型指代的有:

原始类型 (rawtypes)【对应Class

参数化类型 (parameterizedtypes)【对应ParameterizedType

数组类型 (arraytypes)【对应GenericArrayType

类型变量 (typevariables)【对应TypeVariable

基本数据类型(primitivetypes)【仍然对应Class

 

4. java.lang.reflect.ParameterizedType接口

ParameterizedType接口类型的含义

表示参数化类型。比如:Map这种参数化类型

获取参数化类型<>中的实际类型

 

一、源码声明Type[] getActualTypeArguments();

 

【注意】无论<>中有几层<>嵌套,这个方法仅仅脱去最外层<>之后剩下的内容就作为这个方法的返回值

·  ArrayList<arraylist> al1,  </arraylist

·  ArrayList<E> al2,  

·  ArrayList<String> al3,  

·  ArrayList < ? extends Number> al4,  

那么他的每一参数总体上看都是参数化类型的。

{1}. 对于ArrayList<arraylist>,通过getActualTypeArguments()返回之后,脱去最外层的<>之后,剩余的类型是ArrayList因此对这个参数的返回类型是ParameterizedType</arraylist

{2}. 对于ArrayList,通过getActualTypeArguments()返回之后,脱去最外层的<>之后,剩余的类型是E因此对这个参数的返回类型是TypeVariable

{3}. 对于ArrayList,通过getActualTypeArguments()返回之后,脱去最外层的<>之后,剩余的类型是String因此对这个参数的返回类型是Class

{4}. 对于ArrayList< ? extends Number>,通过getActualTypeArguments()返回之后,脱去最外层的<>之后,剩余的类型是? ExtendsNumber因此对这个参数的返回类型是WildcardType

{5}. 对于ArrayList<E[]>,通过getActualTypeArguments()返回之后,脱去最外层的<>之后,剩余的类型是E[]因此对这个参数的返回类型是GenericArrayType

所以,可能获得各种各样类型的实际参数,所以为了统一,采用直接父类数组Type[]进行接收。

 

 

二、源码声明TypegetGenericComponentType();

【注意】无论从左向右有几个[]并列,这个方法仅仅脱去最右边[]之后剩下的内容就作为这个方法的返回值

为什么返回值类型Type

public static  EmethodV(

String[]p1,

E[]p2,

ArrayList[]p3,

E[][]p4){}

{1}. 对于String[],通过getComponentType()返回之后,脱去最右边的[]之后,剩余的类型是String因此对这个参数的返回类型是Class

{2}. 对于E[],通过getComponentType()返回之后,脱去最右边的[]之后,剩余的类型是E因此对这个参数的返回类型是TypeVariable

{3}. 对于ArrayList[],通过getComponentType()返回之后,脱去最右边的[]之后,剩余的类型是ArrayList因此对这个参数的返回类型是ParameterizedType

{4}. 对于E[][],通过getComponentType()返回之后,脱去最右边的[]之后,剩余的类型是E[]因此对这个参数的返回类型是GenericArrayType

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值