日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中的泛型的使用与理解

發(fā)布時間:2025/3/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中的泛型的使用与理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是泛型?

  泛型是程序設(shè)計語言的一種特性。允許程序員在強(qiáng)類型程序設(shè)計語言中編寫 體驗泛型
代碼時定義一些可變部份,那些部份在使用前必須作出指明。各種程序設(shè)計語言和其編譯器、運(yùn)行環(huán)境對泛型的支持均不一樣。將類型參數(shù)化以達(dá)到代碼復(fù)用提高軟件開發(fā)工作效率的一種數(shù)據(jù)類型。泛型類是引用類型,是堆對象,主要是引入了類型參數(shù)這個概念。

?

定義:

泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個參數(shù)。這種參數(shù)類型可以用在類、接口和方法
的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。 Java語言引入泛型的好處是安全簡單。

在Java SE 1.5之前,沒有泛型的情況的下,通過對類型Object的引用來實現(xiàn)參數(shù)的“任意化”,“任意化”帶來的缺點(diǎn)是要做顯式的強(qiáng)制類型
轉(zhuǎn)換,而這種轉(zhuǎn)換是要求開發(fā)者對實際參數(shù)類型可以預(yù)知的情況下進(jìn)行的。對于強(qiáng)制類型轉(zhuǎn)換錯誤的情況,編譯器可能不提示錯誤,在運(yùn)行的時候才出現(xiàn)異常,這是一個安全隱患。

泛型的好處:

??? 泛型的好處是在編譯的時候檢查類型安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動和隱式的,提高代碼的重用率。

??? 1、泛型的類型參數(shù)只能是類類型(包括自定義類),不能是簡單類型。

??? 2、同一種泛型可以對應(yīng)多個版本(因為參數(shù)類型是不確定的),不同版本的泛型類實例是不兼容的。

??? 3、泛型的類型參數(shù)可以有多個。

??? 4、泛型的參數(shù)類型可以使用extends語句,例如<T extends superclass>。習(xí)慣上稱為“有界類型”。

??? 5、泛型的參數(shù)類型還可以是通配符類型。例如Class<?> classType = Class.forName("java.lang.String");

?

注意:

  • 泛型是 Java 1.5 的新增特性,它以C++模板為參照,本質(zhì)是參數(shù)化類型(Parameterized Type)的應(yīng)用。
  • 類型參數(shù)只能用來表示引用類型,泛型在Java中要求,泛型傳入的必須是包裝類型,必須是Object類型的,或者是自定義的類,不能傳入基本類型例如? int、double、char 等。,必須要傳包裝類型如Integer不能用來表示基本類型,但是傳遞基本類型不會報錯,因為它們會自動裝箱成對應(yīng)的包裝類。

運(yùn)用:

1 /*iG相當(dāng)于占位符,用來傳遞數(shù)據(jù)類型,而不是數(shù)據(jù)的值,稱為類型參數(shù)(名字可以自定義,當(dāng)然更多的時候我們得按照規(guī)范來) 2 * 3 */ 4 //自定義泛型類,多個泛型之間可以用逗號隔開如<iG,iT,..> 5 class MyArrays<iG>{ //類的泛型必須要放在類名的后面 6 //調(diào)換數(shù)組的元素的位置 7 public void rever(iG[] a){ 8 System.out.println(a); 9 } 10 } 11 public class customToolClass { 12 public static void main(String[] args){ 13 String[] str=new String[10]; 14 Integer[] intArr = new Integer[10]; 15 //不能傳基本數(shù)據(jù)類型,就算是整形數(shù)組,如int[],也要傳int的包裝類Integer 16 int[] arr = new int[10]; 17 // MyArrays<int> my1 = new MyArray<int>(); //不能是基本數(shù)據(jù)類型 18 MyArrays<Integer> my2 = new MyArrays<Integer>(); // 只能是包裝類 19 //my2.rever(arr); //不能是整形數(shù)組 20 //標(biāo)準(zhǔn)格式是這樣的,兩邊的類型要匹配 21 MyArrays<String> aa = new MyArrays<String>(); 22 aa.rever(str); 23 //下面這兩種也是可以的,但是不推薦,這是java為了向下兼容以前的版本設(shè)計的 24 MyArrays<String> cc = new MyArrays(); 25 MyArrays dd = new MyArrays<String>(); 26 //-------------------------------------------------------------- 27 MyArrays<Integer> aa1 = new MyArrays<Integer>(); 28 aa1.rever(intArr); 29 } 30 }

?

?與普通類的定義相比,上面的代碼在類名后面多出了 <iG> ,iG?是自定義的標(biāo)識符,也是參數(shù),用來傳遞數(shù)據(jù)的類型,而不是數(shù)據(jù)的值,我們稱之為類型參數(shù)。在泛型中,不但數(shù)據(jù)的值可以通過參數(shù)傳遞,數(shù)據(jù)的類型也可以通過參數(shù)傳遞。iG只是數(shù)據(jù)類型的占位符,運(yùn)行時會被替換為真正的數(shù)據(jù)類型。

傳值參數(shù)(我們通常所說的參數(shù))由小括號包圍,如?(int x, double y),類型參數(shù)(泛型參數(shù))由尖括號包圍,多個參數(shù)由逗號分隔,如 <T> 或 <T, E>。注意:這只是個規(guī)范,名稱可以自定義的。

類型參數(shù)需要在類名后面給出。一旦給出了類型參數(shù),就可以在類中使用了。類型參數(shù)必須是一個合法的標(biāo)識符,習(xí)慣上使用單個大寫字母,通常情況下,K 表示鍵,V 表示值,E 表示異常或錯誤,T 表示一般意義上的數(shù)據(jù)類型。

泛型類在實例化時必須指出具體的類型,也就是向類型參數(shù)傳值,格式為:
? ? className variable<dataType1, dataType2> = new className<dataType1, dataType2>();
也可以省略等號右邊的數(shù)據(jù)類型,但是會產(chǎn)生警告,即:
? ? className variable<dataType1, dataType2> = new className();

因為在使用泛型類時指明了數(shù)據(jù)類型,賦給其他類型的值會拋出異常,既不需要向下轉(zhuǎn)型,也沒有潛在的風(fēng)險,比本文一開始介紹的自動裝箱和向上轉(zhuǎn)型要更加實用。

測試效果圖:

轉(zhuǎn)載于:https://www.cnblogs.com/qq1871707128/p/6118156.html

總結(jié)

以上是生活随笔為你收集整理的java中的泛型的使用与理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。