本篇文章給大家分享的是有關(guān)JDK5.0新特性的泛型怎么理解,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
成都創(chuàng)新互聯(lián)成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元鹽城做網(wǎng)站,已為上家服務(wù),為鹽城各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
沒(méi)有參數(shù)的情況下使用泛型
既然在J2SE 5.0中收集類型已經(jīng)泛型化,那么,原來(lái)的使用這些類型的代碼將如何呢?很幸運(yùn),他們?cè)贘AVA 5中將繼續(xù)工作,因?yàn)槟隳苁褂脹](méi)有參數(shù)的泛型。比如,你能繼續(xù)像原來(lái)一樣使用List接口,正如下面的例子一樣。
List stringList1 = new ArrayList(); stringList1.add("Java 1.0 - 5.0"); stringList1.add("without generics"); String s1 = (String) stringList1.get(0);
一個(gè)沒(méi)有任何參數(shù)的泛型被稱為原型(raw type)。它意味著這些為JDK1.4或更早的版本而寫(xiě)的代碼將繼續(xù)在java 5中工作。
盡管如此,一個(gè)需要注意的事情是,JDK5編譯器希望你使用帶參數(shù)的泛型。否則,編譯器將提示警告,因?yàn)樗J(rèn)為你可能忘了定義類型變量s。比如,編譯上面的代碼的時(shí)候你會(huì)看到下面這些警告,因?yàn)榈谝粋€(gè)List被認(rèn)為是原型。
Note: com/brainysoftware/jdk5/app16/GenericListTest.java
uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
當(dāng)你使用原型時(shí),如果你不想看到這些警告,你有幾個(gè)選擇來(lái)達(dá)到目的:
1.編譯時(shí)帶上參數(shù)-source 1.4
2.使用@SupressWarnings("unchecked")注釋
3.更新你的代碼,使用List. List的實(shí)例能接受任何類型的對(duì)象,就像是一個(gè)原型List。然而,編譯器不會(huì)報(bào)錯(cuò)。
使用 ? 通配符
前面提過(guò),如果你聲明了一個(gè)List, 那么這個(gè)List對(duì)aType起作用,所以你能儲(chǔ)存下面這些類型的對(duì)象:
1.一個(gè)aType的實(shí)例
2.它的子類的實(shí)例(如果aType是個(gè)類)
3.實(shí)現(xiàn)aType接口的類實(shí)例(如果aType是個(gè)接口)
但是,請(qǐng)注意,一個(gè)泛型本身是個(gè)JAVA類型,就像java.lang.String或java.io.File一樣。傳遞不同的類型變量給泛型可以創(chuàng)建不同的JAVA類型。比如,下面例子中l(wèi)ist1和list2引用了不同的類型對(duì)象。
List
list1 = new ArrayList();
List
list1指向了一個(gè)類型變量s為java.lang.Objects 的List而list2指向了一個(gè)類型變量s為String 的List。所以傳遞一個(gè)List
public static void doIt(List l) {}
在某些情況下你會(huì)考慮使用 ? 通配符。比如,你有一個(gè)printList函數(shù),這個(gè)函數(shù)打印一個(gè)List的所有成員,你想讓這個(gè)函數(shù)對(duì)任何類型的List起作用時(shí)。否則,你只能累死累活的寫(xiě)很多printList的重載函數(shù)。下面的列表引用了使用 ? 通配符的printList函數(shù)。
public class WildCardTest {
public static void printList(List list) {
for (Object element : list) {
System.out.println(element);
}
}
public static void main(String[] args) {
List
list1.add("Hello");
list1.add("World");
printList(list1);
List
list2.add(100);
list2.add(200);
printList(list2);
}
}
這些代碼說(shuō)明了在printList函數(shù)中,List表示各種類型的List對(duì)象。然而,請(qǐng)注意,在聲明的時(shí)候使用 ? 通配符是不合法的,像這樣:
List myList = new ArrayList(); // 不合法
ListmyList = new ArrayList();
在函數(shù)中使用界限通配符
public class BoundedWildcardTest { public static double getAverage(List<!--xtends Numb--> numberList) { double total = 0.0; for (Number number : numberList) total += number.doubleValue(); return total/numberList.size(); } public static void main(String[] args) { List由于有了上界規(guī)則,上面例子中的getAverage函數(shù)允許你傳遞一個(gè)List
package com.brainysoftware.jdk5.app16; public class Point在這個(gè)例子中,T是Point的類型變量 。T是getX和getY的返回值類型,也是setX和setY的參數(shù)類型。此外,構(gòu)造函數(shù)結(jié)合兩個(gè)T參數(shù)。
Point泛型使代碼在編譯時(shí)有了更嚴(yán)格的類型檢查。特別是在集合框架中,泛型有兩個(gè)作用。第一,他們?cè)黾恿藢?duì)集合類型在編譯時(shí)的類型檢查,所以集合類所能持有的類型對(duì)傳遞給它的參數(shù)類型起了限制作用。比如你創(chuàng)建了一個(gè)持有strings的java.util.List實(shí)例,那么他就將不能接受Integers或別的類型。其次,當(dāng)你從一個(gè)集合中取得一個(gè)元素時(shí),泛型消除了類型轉(zhuǎn)換的必要。
以上就是JDK5.0新特性的泛型怎么理解,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:JDK5.0新特性的泛型怎么理解
標(biāo)題來(lái)源:http://muchs.cn/article6/gjchig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、用戶體驗(yàn)、App設(shè)計(jì)、標(biāo)簽優(yōu)化、企業(yè)建站、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)