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