是一种未知的数据类型,当我们不知道使用数据类型的时候,可以使用泛型,泛型可以看成是一个变量,用来接收数据类型
泛型可以用在 类 class 上 ,也可以用在 方法上
// 定义 泛型类 格式 class<泛型>
class Test<E>{
//定义泛型方法 格式 <泛型> 返回值类型 方法名(泛型类型 变量名){}
public <M> void test(M m){
}
}
泛型通配符
?:代表任意的数据类型
使用方式:
不能创建对象使用
只能作为方法的参数使用
通配符的高级使用 -- 受限泛型
上限: ? extends E 传入的参数只能是E的子类及E本身
下限: ? super E 传入的参数只能是E本身以及E的父类
父类获取子类传递的泛型
ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();
Type[] types = type.getActualTypeArguments();
if (types.length > 0) {
Class clazz = (Class) types[0];
System.out.println("type[0] = " + clazz.getSimpleName());
Class aClass = ((Class) types[0]).asSubclass(Foo.class);
System.out.println("subClass = " + aClass.getSimpleName());
}
ParameterizedType是Type的子接口,表示一个有参数的类型
网友评论