泛型中的? 通配符以及泛型的邊界

?通配符

當接收的類型不確定時,可以使用?通配符,?可以指向任何類型

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);
   }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章