基础概念
定义
- 泛型类定义时,不指定具体类型。
- 实例化对象时,指定具体类型,若不指定,默认Object类型
-
常用类型
解决的问题
解决编译时的模糊类型
-
泛型使用
泛型子类
泛型子类对象与父类泛型相同
-
泛型接口
泛型接口继承泛型接口,与接口类类型一致,可进行泛型扩充
非泛型接口实现泛型接口需指定类型
//父类
public class Parent<T>{
private T key;
public Parent(T key){
this.key=key;
}
public T getKey(){
return key;
}
}
//子类
public class Child<T,E> implements Parent<T>{
private T key;
private E value;
public Child(T key,E value){
this.key=key;
this.value=value;
}
public T getKey(){
return key;
}
}
泛型方法
//参数和返回值中使用的泛型,需要在前面的泛型列表中<E>
public <E> E getNewValue(List<E> e){
return null;
}
类型通配符
使用”?”代表泛型参数
//设置类型通配符上限边界
public void getFirstNumber(List<? extends Number> list){
Number num = list.get(0);
System.out.println(num);
}
//设置类型通配符下限边界
public void getFirstNumber(List<? super Number> list){
Number num = list.get(0);
System.out.println(num);
}
类型擦除
-
泛型数组
//方法一
ArrayList<String>[] intList = new ArrayList[5];
//方法二
public class Fruit<T>{
private T[] array;
public Fruit(Class<?> clz,int length){
array = (T[])Array.newInstance(clz,length);
}
}
Fruit<String> fruit = new Fruit<>(String.class,3);