通配符泛型
“?” - 代表未知类型
extends - 关键字声明了类型的上界,表示参数化的类型可能是所指定的类型,或者是此类型的子类
super - 关键字声明了类型的下界,表示参数化的类型可能是所指定的类型,或者是此类型的父类型,直至Object
--->带有泛型的.java文件,只有被编译成.class文件后类型才能被确定:
List<? extends Date> listEx = new ArrayList<Timestamp>();
listEx.add(new Timestamp(System.currentTimeMillis())); //出错,无法确定类型, 考虑到安全性,什么都不能加入
Date date = listEx.get(1); //正确,Date作为父类可以引用子类
List<? super Date> listSu = new ArrayList<Object>();
listSu.add(new Date()); //类型不确定,只能加入Date,就算是Object也不能加入, 因为不能保证Object一定是Date的父类
Date date = listSu.get(1); //出错,Date作为子类,不能引用其父类(虽然类型未知)