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

首頁(yè) > 編程 > Java > 正文

Java中泛型的用法總結(jié)

2019-11-26 15:09:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例總結(jié)了Java中泛型的用法。分享給大家供大家參考。具體如下:

1 基本使用

public interface List<E> { void add(E); Iterator<E> iterator();}

2 泛型與子類(lèi)

Child是Parent的子類(lèi),List<Child>卻不是List<Parent>的子類(lèi)。
因此:List<Object> list = new ArrayList<String>()是錯(cuò)誤的。
如果上面是正確的,那么:

List<String> ls = new ArrayList<String>(); //1List<Object> lo = ls; //2lo.add(new Object()); // 3String s = ls.get(0); // 4,將object轉(zhuǎn)換為string將失敗。

3 wildcards

因?yàn)?的原因,下面的實(shí)現(xiàn)用于統(tǒng)配集合的輸出是不行的

void printCollection(Collection<Object> c) { for (Object o: c) { // do something }}

因此,需要通配符?:

void printCollection(Collection<?> c) { for (Object o: c) { // 1 // do something }} // ok

此處的?表示類(lèi)型未知,但是任何對(duì)象均是Object,因此上例的1是正確的。但下例卻是錯(cuò)誤的:

void add(Collection<? extends MyClass> c) { c.add(new MyClass()); // wrong} // ok

原因也很明確,? extends MyClass說(shuō)明類(lèi)型是MyClass的子類(lèi),但是卻并不知道具體類(lèi)型

4. 泛型方法

上例可以實(shí)現(xiàn)為:

<T> add(Collection<T> c, T t) { c.add(t);}

編譯器在保證語(yǔ)義的前提,會(huì)幫忙做類(lèi)型的轉(zhuǎn)換工作。

5. 泛型運(yùn)行時(shí)的對(duì)比

List<String> l1 = new ArrayList<String>();List<Integer> l2 = new ArrayList<Integer>();System.out.println(l1.getClass() == l2.getClass()); // true

因?yàn)榉盒皖?lèi)運(yùn)行時(shí)時(shí)一樣的。

6 泛型數(shù)組(可能導(dǎo)致類(lèi)型不安全)

復(fù)制代碼 代碼如下:
List<String>[] lsa = new ArrayList<String>[10]; // error

如果可以的話,可能導(dǎo)致類(lèi)型不安全。如:

Object o = lsa;Object []oa = (Object[])o;List<Integer> li = new ArrayList<Integer>();li.add(new Integer(3));oa[1] = li;String s = lsa[1].get(0); // runtime error

希望本文所述對(duì)大家的java程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 惠来县| 梅州市| 黔西县| 西充县| 上犹县| 陕西省| 石屏县| 宿迁市| 城步| 洛阳市| 拉萨市| 枣阳市| 广州市| 泰宁县| 阿巴嘎旗| 安顺市| 句容市| 吉林省| 磴口县| 凭祥市| 牙克石市| 高要市| 平果县| 太原市| 金溪县| 宣威市| 玉树县| 廊坊市| 长春市| 承德市| 乌拉特后旗| 南川市| 湘潭县| 邵东县| 叶城县| 武鸣县| 山阳县| 房产| 望江县| 万盛区| 万盛区|