国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 滨海县| 雅江县| 平山县| 侯马市| 甘洛县| 珠海市| 新蔡县| 桑植县| 阿拉善左旗| 洞口县| 清水河县| 江口县| 三河市| 遂昌县| 阿拉善右旗| 恭城| 札达县| 尚志市| 四平市| 上林县| 保亭| 萝北县| 左贡县| 上虞市| 湄潭县| 洱源县| 股票| 吉木萨尔县| 茌平县| 威信县| 文山县| 镇沅| 正镶白旗| 内丘县| 藁城市| 五河县| 宣汉县| 文化| 逊克县| 筠连县| 皋兰县|