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 al1,  

·  ArrayList al2,  

·  ArrayList al3,  

·  ArrayList < ? extends Number> al4,  

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

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

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

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

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

{5}. 对于ArrayList,通过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

 

你可能感兴趣的:(Java,java)