溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中泛型的實際應用

發(fā)布時間:2020-06-23 15:00:15 來源:億速云 閱讀:189 作者:元一 欄目:編程語言

今天就跟大家聊聊有關(guān)java中泛型的實際應用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Java泛型

Java泛型是J2 SE1.5中引入的一個新特性,其本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)(type parameter)這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。

比如我們要寫一個排序方法,能夠?qū)φ蛿?shù)組、字符串數(shù)組甚至其他任何類型的數(shù)組進行排序,我們就可以使用 Java 泛型。

Java泛型的作用

第一是泛化??梢杂肨代表任意類型Java語言中引入泛型是一個較大的功能增強不僅語言、類型系統(tǒng)和編譯器有了較大的變化,以支持泛型,而且類庫也進行了大翻修,所以許多重要的類,比如集合框架,都已經(jīng)成為泛型化的了,這帶來了很多好處。
第二是類型安全。泛型的一個主要目標就是提高ava程序的類型安全,使用泛型可以使編譯器知道變量的類型限制,進而可以在更高程度上驗證類型假設(shè)。如果不用泛型,則必須使用強制類型轉(zhuǎn)換,而強制類型轉(zhuǎn)換不安全,在運行期可能發(fā)生ClassCast Exception異常,如果使用泛型,則會在編譯期就能發(fā)現(xiàn)該錯誤。
第三是消除強制類型轉(zhuǎn)換。泛型可以消除源代碼中的許多強制類型轉(zhuǎn)換,這樣可以使代碼更加可讀,并減少出錯的機會。
第四是向后兼容。支持泛型的Java編譯器(例如JDK1.5中的Javac)可以用來編譯經(jīng)過泛型擴充的Java程序(Generics Java程序),但是現(xiàn)有的沒有使用泛型擴充的Java程序仍然可以用這些編譯器來編譯。

1.泛型方法

你可以寫一個泛型方法,該方法在調(diào)用時可以接收不同類型的參數(shù)。根據(jù)傳遞給泛型方法的參數(shù)類型,編譯器適當?shù)靥幚砻恳粋€方法調(diào)用。

例如:

public static < E > void printArray( E[] inputArray ){
	for ( E element : inputArray ){
		System.out.printf( "%s ", element );
	}
}

泛型邊界

(1)<? extends T>表示該通配符所代表的類型是 T 類型的子類。

(2)<? super T>表示該通配符所代表的類型是 T 類型的父類。

2.泛型類

泛型類的聲明和非泛型類的聲明類似,除了在類名后面添加了類型參數(shù)聲明部分。和泛型方法一樣,泛型類的類型參數(shù)聲明部分也包含一個或多個類型參數(shù),參數(shù)間用逗號隔開。

一個泛型參數(shù),也被稱為一個類型變量,是用于指定一個泛型類型名稱的標識符。因為他們接受一個或多個參數(shù),這些類被稱為參數(shù)化的類或參數(shù)化的類型。

例如:

public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return t;
}
}

3.類型擦除

Java 中的泛型基本上都是在編譯器這個層次來實現(xiàn)的。在生成的 Java 字節(jié)代碼中是不包含泛型中的類型信息的。使用泛型的時候加上的類型參數(shù),會被編譯器在編譯的時候去掉。這個過程就稱為類型擦除。

如在代碼中定義的 List和 List等類型,在編譯之后都會變成 List。 JVM 看到的只是 List,而由泛型附加的類型信息對 JVM 來說是不可見的。

類型擦除的基本過程也比較簡單,首先是找到用來替換類型參數(shù)的具體類。這個具體類一般是 Object。如果指定了類型參數(shù)的上界的話,則使用這個上界。把代碼中的類型參數(shù)都替換成具體的類。

4.類型通配符

類型通配符一般是使用?代替具體的類型參數(shù)。例如List<?>在邏輯上是List,List等所有List<具體類型實參>的父類。

看完上述內(nèi)容,你們對java中泛型的實際應用有進一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI