Type接口解读
文章目录
一、简介
Type是java语言所有类型公共的父接口,这里基于源码对Type接口及子类和子接口进行解读。
二、Type定义
2.1 Type包含的类型
Type是java中所有类型的父接口,具体类型如下:
- raw types:原始类型,如:Class;
- parameterized types:参数化类型,如:List;
- array types: 数组类型,如:int[];
- type varialbes:类型变量,如:List或者 T,这里T就是类型变量;
- primitive types:基本类型,如:int;
2.2 Type定义
package java.lang.reflect;
public interface Type {
//返回类型描述
default String getTypeName() {
return toString();
}
}
2.3 Type类图
Type主要有1个实现类和4个子接口,类图定义如下:
三、Type子接口
Type主要有4个子接口和1个直接实现类。直接实现类为原始类型(raw types)Class,这在另一篇博客中有介绍,在此略过。
这里主要对4个子接口进行介绍,即:ParameterizedType、TypeVariable、GenericArrayType、WildcardType。
3.1 ParameterizedType
ParameterizedType表示参数化类型,如List,接口定义如下:
package java.lang.reflect;
public interface ParameterizedType extends Type {
//返回当前Type的实际类型参数数组,没有则返回数组为空
Type[] getActualTypeArguments();
//返回当前Type的原始类型,如List<String>的原始类型List
Type getRawType();
//返回拥有当前Type的Type(即当前type是结果Type的1个成员)
Type getOwnerType();
}
示例如下:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import static com.sun.jmx.mbeanserver.Util.cast;
public class ParameterizedTypeStudy {
public static void main(String[] args) {
//获取Stu的父泛型类型
ParameterizedType parameterizedType = (ParameterizedType) Stu.class.getGenericSuperclass();
//获取泛型中实际类型参数数组
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
//将数组中类型参数转为实际类型
Class<Element> elementClazz = cast(actualTypeArguments[0]);
//获取泛型本身的实际类型Person
Type rawType = parameterizedType.getRawType();
Class<Person> personClazz = cas