前言
Type
Java 语言中所有类型的公共父接口。 在 JDK1.8 之前是一个空接口,自 JDK1.8 起多了个 getTypeName() 方法。
1 |
|
Type直接子接口
- 参数化类型(ParameterizedType): 表示一种参数化的类型,比如
Collection<String>
- 泛型数组类型(GenericArrayType): 表示一种元素类型是参数化类型或者类型变量的数组类型
- 类型变量(TypeVariable): 是各种类型变量的公共父接口
- 通配符类型(WildcardType): 代表一种通配符类型表达式,比如
?, ? extends Number, ? super Integer
Type直接子类
- Class类
ParameterizedType
源码 ParameterizedType 说明
1 |
|
- getActualTypeArguments
- 获取“泛型实例”中<>里面的“泛型变量”(也叫类型参数)的值,这个值是一个类型。因为可能有多个“泛型变量”(如:Map<K,V>),所以返回的是一个Type[]。
注意:
无论<>中有几层<>嵌套,这个方法仅仅脱去最外层的<>,之后剩下的内容就作为这个方法的返回值,所以其返回值类型是不确定的。
1 |
|
- getRawType
- 返回最外层<>前面那个类型,即Map<K ,V>的Map。
- getOwnerType
- 获得这个类型的所有者的类型。这主要是对嵌套定义的内部类而言的,例如于对java.util.Map.Entry<K,V>来说,调用getOwnerType方法返回的就是interface java.util.Map。
- 如果当前类不是内部类,而是一个顶层类,那么 getOwnerType 方法将返回null。
案例验证
1 |
|
运行结果
1 |
|
GenericArrayType
源码 GenericArrayType 说明
1 |
|
- getGenericComponentType
- 获取“泛型数组”中元素的类型,要注意的是:无论从左向右有几个[]并列,这个方法仅仅脱去最右边的[]之后剩下的内容就作为这个方法的返回值
案例验证
1 |
|
程序运行输出
1 |
|
WildcardType
源码 WildcardType 说明
1 |
|
案例验证
1 |
|
程序运行输出
1 |
|
TypeVariable
源码 TypeVariable 说明
1 |
|
案例验证
1 |
|
程序运行输出
1 |
|
使用场景
扩展
1 |
|
程序运行结果
1 |
|
Reference
- Java中与泛型相关的接口 之 术语定义
- [Java中与泛型相关的接口 之 TypeVariable
](https://www.jianshu.com/p/89a64318e290) - 我眼中的Java-Type体系(2)
- 实战应用示例