国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

38_泛型的通配符擴展應用

2019-11-14 22:49:24
字體:
來源:轉載
供稿:網友
38_泛型的通配符擴展應用
  • 問題:
    • 定義一個方法,該方法用于打印出任意參數化類型的集合中的所有數據,該方法如何定義呢?
  • 錯誤的方式

public static void PRintCollection(Collection<Object> cols){    for(Object obj:cols){        System.out.println(obj);    }    /**    cols.add("string");//沒錯    cols=new HashSet<Date>();//會報告錯誤!    */}

 

  • 正確的方式:

public static void printCollection(Collection<?> cols){    for(Object obj:cols){        System.out.println(obj);    }    /**    cols.add("string");//錯誤,因為他不知道自己未來匹配就一定是Stirng    cols.size();//沒錯,此方法與類型參數沒有關系    cols=new HashSet<Date>();//沒錯,可以和 Collection<?>畫等號    */}
  • 總結:
    • 使用?通配符可以引用其他各種參數化的類型,?通配符定義的變量主要用作引用,可以調用與參數化無關的方法,不能調用與參數化有關的方法。

上圖中,大紅叉的方法都是和類型相關的,在使用泛型通配符?時,不能調用。

Collection<?> a可以和任意參數化的類型匹配,但到底匹配的是什么類型,只有以后才知道,所以,

a=new ArrayList<Integer>();和 a= new ArrayList<String>();都可以,但a.add(new Date);或者 a.add("abc");都不行。

 

Cols<Object>中的Object只是說明Cols<Object>實例對象中的方法接收的參數是Object

Cols<Object>是一種具體類型,new HashSet<Date>也是一種具體類型,兩者沒有兼容性。

 

 

 

 

  • 泛型中?通配符的擴展
    • 限定通配符的上邊界

      • 正確  Vector<? extends Number> x=new Vector<Integer>();

      • 錯誤   Vector<? extends Number> x=new  Vector<String>();

    • 限定通配符的下邊界

      • 正確  Vector<? super Integer> x=new Vector<Number>();

      • 錯誤  Vector<? super Integer> x=new Vector<Byte>();

    • 提示

      • 限定通配符總是包括自己


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 星座| 正宁县| 肥西县| 泸西县| 当涂县| 静乐县| 银川市| 肥乡县| 博罗县| 永济市| 双牌县| 常山县| 安吉县| 南靖县| 泸西县| 灵宝市| 云阳县| 丰顺县| 迁西县| 明光市| 涟源市| 宝山区| 于田县| 桐梓县| 屏南县| 印江| 华安县| 德江县| 临夏县| 如东县| 鹿邑县| 四川省| 岳池县| 民乐县| 讷河市| 兴海县| 景洪市| 五原县| 株洲市| 屏山县| 青田县|