posts - 37,comments - 7,trackbacks - 0
           

          泛型的引入使得 Java 語言中的類型系統(tǒng)更加復(fù)雜。以前,該語言具有兩種類型 —— 引用類型和基本類型。對(duì)于引用類型,類型 的概念基本上可以互換,術(shù)語子類型子類 也可以互換。

          隨著泛型的引入,類型和類之間的關(guān)系變得更加復(fù)雜。List<Integer>List<Object> 是不同的類型,但是卻是相同的類。盡管 Integer 擴(kuò)展 Object,但是 List<Integer> 不是 List<Object>,并且不能賦給 List<Object> 或者強(qiáng)制轉(zhuǎn)換成 List<Object>

          另一方面,現(xiàn)在有了一個(gè)新的古怪的類型叫做 List<?>,它是 List<Integer>List<Object> 的父類。并且有一個(gè)更加古怪的 List<? extends Number>。類型層次的結(jié)構(gòu)和形狀也變得復(fù)雜得多。類型和類不再幾乎是相同的東西了。

          extends 的新含意 

          在 Java 語言引入泛型之前,extends 關(guān)鍵字總是意味著創(chuàng)建一個(gè)新的繼承自另一個(gè)類或接口的類或接口。

          引入泛型之后,extends 關(guān)鍵字有了另一個(gè)含意。將 extends 用在類型參數(shù)的定義中(Collection<T extends Number>)或者通配符類型參數(shù)中(Collection<? extends Number>)。

          當(dāng)使用 extends 來指示類型參數(shù)限制時(shí),不需要子類-父類關(guān)系,只需要子類型-父類型關(guān)系。還要記住,有限制類型不需要是該限制的嚴(yán)格子類型;也可以 該限制。換句話說,對(duì)于 Collection<? extends Number>,您可以賦給它 Collection<Number>(盡管 Number 不是 Number 的嚴(yán)格子類型)和 Collection<Integer>Collection<Long>Collection<Float> 等等。

          在任何這些含意中,extends 右邊的類型都可以是參數(shù)化類型(Set<V> extends Collection<V>)。

          posted on 2005-08-24 11:36 Dave 閱讀(191) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 霸州市| 襄城县| 从江县| 拉萨市| 桃园市| 忻城县| 南皮县| 绥德县| 鹤壁市| 宜川县| 谢通门县| 巢湖市| 扬中市| 潍坊市| 峡江县| 平定县| 崇明县| 乡宁县| 静海县| 格尔木市| 紫阳县| 余江县| 桃园市| 习水县| 高陵县| 万年县| 巴里| 墨脱县| 闸北区| 桑日县| 安徽省| 宜宾县| 长治县| 永仁县| 顺平县| 九江市| 大冶市| 株洲市| 湾仔区| 嘉义市| 额尔古纳市|