泛型介绍
我们都知道一个数据类型可以定义很多变量,例如:int a,b,c,d;那有没有一种类型可以定义或代表很多种数据类型呢?这就是泛型出现的原因。泛型简单来说就是数据类型参数化。
java中泛型是在jdk1.5出现的,之所以能出现还要得益于Object对象,因为java中泛型属于伪泛型,采用泛型擦除机制,最终泛型对象都是被Object对象引用。
既然说最终都是Object对象,那为什么还要出现泛型,这不是对此一举吗?因为泛型带来的好处是编译时期检查,可以防止"猫中出现狗"的现象。
jdk中跟泛型有关的接口
type
type是所有类型的父接口,只有一个方法
public interface Type {
//返回描述这个类型的字符串
String getTypeName() {
return toString();
}
}
它有四个子接口和一个实现类,实现类是Class,子接口是:ParameterizedType,TypeVariable,WildcardType,GenericArrayType。Class类就不详细介绍,下面介绍其四个子接口。
ParameterizedType参数化的类型
ParameterizedType表示的是泛型被指定为具体数据类型的类型,例如: Map<Cat,Dog>,List<Cat>等等
ParameterizedType中的方法:
public interface ParameterizedType extends Type {
//获取实际的类型参数,例如List<Cat>中的Cat的Class对象
Type[] getActualTypeArguments();
//获取原生类型,例如List<Cat>中的List的Class对象
Type getRawType();
//获取拥有者类型,指的是这个类或者接口是定义在另一个类或者接口的内部的
//例如Map中的Entry接口,获取到的类型就是Map的Class对象,如果是顶层类则返回的是null
Type getOwnerType();
}
TypeVariable类型变量
TypeVariable表示的是原始的泛型信息
TypeVariable中的方法:
public interface TypeVariable<D extends GenericDeclaration> extends Type, AnnotatedElement {