<T>、<K,V>等都是类型通配符,T其实代表了一个未知的类型,在用的时候确定。
典型的就是ArrayList<T>
ArrayList<T>是定义这个类时候的样子
ArrayList<String> str = new ArrayList<String>();是实际使用的样子
当我在<>里填上String时,ArrayList<T>类里所有的"T"都被替换成"String"生效
泛型类
class MyPrinter<T>{
T t;
public T set(T a){
t = a;
}
static void work(T a){
System.out.println(String.valueOf(a));
}
}
泛型方法
public <T> void show(T t){
System.out.println(String.valueOf(t));
}
泛型接口
public interface Generic<T>{
void show(T t);
}
//用同样的泛型类实现它
public class GenericDemo<T> implement Generic<T>{
@Override
void show(T t){
System.out.println(String.valueOf(t));
}
}
类型通配符上限
<?>的意思是类型未知,List<?>代表所有类型List的父类,但是这东西用不了
<? extends Number>是限制类型通配符的上限,代表Number和其子类型
<? super Number>是限制类型通配符的下限,代表Number和其父类型
List<? extends Number> list = new ArrayList<Number>();
List<? extends Number> list = new ArrayList<Integer>();
List<? super Number> list = new ArrayList<Number>();
List<? super Number> list = new ArrayList<Object>();