通配符泛型

By | 19 4 月, 2015

“?” – 代表未知类型

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作为子类,不能引用其父类(虽然类型未知)