?通配符
當接收的類型不確定時,可以使用?通配符,?可以指向任何類型
public class Demo {
public static void main(String[] args) {
xx(new ArrayList<String>());
xx(new ArrayList<Integer>());
}
public static void xx(Collection<?> c){
/*當使用?通配符時,不能再調用與類型相關的方法
* 因爲?指向的是一種不確定的類型
*/
//c.add("sss");
c.size();//這個方法與類型無關
for(Object ob: c){
System.out.println(ob);
}
}
}
泛型的上邊界和下邊界
1.限制上邊界
正確使用方法:Vector<? extends Number> x=new Vector<Integer>();
錯誤使用方法:Vector<? extends Number> x=new Vector<String>();
泛型類中的使用方法:
//繼承它的子類中的泛型必須實現Serializable和Cloneable接口
public class BaseDao<T extends Serializable,Cloneable> {
}
//例如
public class BookDao extends BaseDao<Book> {
}
//這裏的Book需要實現這兩個接口
public class Book implements Serializable,Cloneable{
}
限制下邊界
正確使用方法:Vector<? extends Integer> x=new Vector<Number>();
錯誤使用方法:Vector<? extends Integer> x=new Vector<Byte>();
注意:以下代碼編譯不能通過
public void add(List<? extends Number> list){
//當使用?通配符時,不能再調用與類型相關的方法,指定了邊界也不行
list.add(100);
}