java泛型簡單例子(5篇)_第1頁
java泛型簡單例子(5篇)_第2頁
java泛型簡單例子(5篇)_第3頁
java泛型簡單例子(5篇)_第4頁
java泛型簡單例子(5篇)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——java泛型簡單例子(5篇)范文為教學(xué)中作為模范的文章,也往往用來指寫作的模板。往往用于文秘寫作的參考,也可以作為演講材料編寫前的參考。相信大量人會覺得范文很難寫?下面我給大家整理了一些優(yōu)秀范文,希望能夠幫助到大家,我們一起來看一看吧。

java泛型簡單例子篇三

java泛型

java泛型是java1.5中引入的新特性,在此之前,java通過對類型object的引用來實(shí)現(xiàn)參數(shù)類型的“任意化〞,特點(diǎn)則是需要進(jìn)行顯示的強(qiáng)制類型轉(zhuǎn)換。(而這種顯示的`類型轉(zhuǎn)換可能是無法進(jìn)行的,是錯誤的)但編譯器無法發(fā)現(xiàn)強(qiáng)制類型轉(zhuǎn)換可能引起的異常,異常只有在運(yùn)行時(shí)才能出現(xiàn),成為了系統(tǒng)的安全隱患。為啥要進(jìn)入泛型這個(gè)概念泛型的本質(zhì)是參數(shù)化類型,及所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),此參數(shù)類型可以用在類、接口、和方法的聲明及創(chuàng)立中,分別被稱為泛型類,泛型接口,及泛型方法。使用考前須知:

泛型的類型參數(shù)只能是類類型(包括自定義類),但是不能是簡單類型泛型類型參數(shù)可以是多個(gè)

泛型的參數(shù)類型還可以是通配符類型

沒有泛型的錯誤:

import.*;

publicclassnogenerictypedemo{

publicstaticvoidmain(string[]args)

{

listnames=newarraylist();

("張桑拿");

(newinteger(2);

stringnamefirst=(string)(0);

stringnamesecond=(string)(1);//astexception異常,而且編譯時(shí)沒有被發(fā)現(xiàn)

}

有時(shí)候需要使泛型變量能使用任何的類型,此時(shí)可以使用通配符〞?〞否則可能需要編寫大量版本的重載函數(shù),使用通配符,使方法printlsit()可以接受各種類型的list對象,否則必需使用重載技術(shù),

publicstaticvoidprintlist(listlist)

{

//輸出集合中的元素

}

java泛型簡單例子篇四

導(dǎo)讀:本文是從《javagenericsquicktutorial》這篇文章翻譯而來,譯文來自外刊it評論《java泛型簡明教程》。內(nèi)容如下:

泛型是javase5.0中引入的一項(xiàng)特征,自從這項(xiàng)語言特征出現(xiàn)多年來,我相信,幾乎所有的java程序員不僅聽說過,而且使用過它。關(guān)于java泛型的教程,免費(fèi)的,不免費(fèi)的,有好多。我遇到的最好的教材有:

thejavatutorial

javagenericsandcollections,bymauricenaftalinandphilipwadler

effectivejava中文版(第2版),byjoshuabloch.

盡管有這么多豐富的資料,有時(shí)我感覺,有好多的程序員仍舊不太明白java泛型的功能和意義。這就是為什么我想使用一種最簡單的形式來總結(jié)一下程序員需要知道的關(guān)于java泛型的最基本的知識。

java泛型由來的動機(jī)

理解java泛型最簡單的方法是把它看成一種便捷語法,能節(jié)省你某些java類型轉(zhuǎn)換(casting)上的操作:

1.listbox=...;

2.appleapple=(0);

上面的代碼自身已表達(dá)的很明了:box是一個(gè)裝有apple對象的list。get方法返回一個(gè)apple對象實(shí)例,這個(gè)過程不需要進(jìn)行類型轉(zhuǎn)換。沒有泛型,上面的代碼需要寫成這樣:

1.listbox=...;

2.appleapple=(apple)(0);

很明顯,泛型的主要好處就是讓編譯器保存參數(shù)的類型信息,執(zhí)行類型檢查,執(zhí)行類型轉(zhuǎn)換操作:編譯器保證了這些類型轉(zhuǎn)換的絕對無誤。

相對于依靠程序員來記住對象類型、執(zhí)行類型轉(zhuǎn)換——這會導(dǎo)致程序運(yùn)行時(shí)的失敗,很難調(diào)試和解決,而編譯器能夠幫助程序員在編譯時(shí)強(qiáng)制進(jìn)行大量的類型檢查,發(fā)現(xiàn)其中的錯誤。泛型的構(gòu)成

由泛型的構(gòu)成引出了一個(gè)類型變量的概念。根據(jù)java語言規(guī)范,類型變量是一種沒有限制的標(biāo)志符,產(chǎn)生于以下幾種狀況:

泛型類聲明

泛型接口聲明

泛型方法聲明

泛型構(gòu)造器(constructor)聲明

泛型類和接口

假如一個(gè)類或接口上有一個(gè)或多個(gè)類型變量,那它就是泛型。類型變量由尖括號界定,放在類或接口名的后面:

1.publicinterfacelistextendscollection{

2.

3....

4.}

簡單的說,類型變量扮演的角色就宛如一個(gè)參數(shù),它提供應(yīng)編譯器用來類型檢查的信息。java類庫里的好多類,例如整個(gè)collection框架都做了泛型化的修改。例如,我們在上面的第一段代碼里用到的list接口就是一個(gè)泛型類。在那段代碼里,box是一個(gè)list對象,它是一個(gè)帶有一個(gè)apple類型變量的list接口的類實(shí)現(xiàn)的實(shí)例。編譯器使用這個(gè)類型變量參數(shù)在get方法被調(diào)用、返回一個(gè)apple對象時(shí)自動對其進(jìn)行類型轉(zhuǎn)換。實(shí)際上,這新出現(xiàn)的泛型標(biāo)記,或者說這個(gè)list接口里的get方法是這樣的:

1.tget(intindex);

get方法實(shí)際返回的是一個(gè)類型為t的對象,t是在list聲明中的類型變量。泛型方法和構(gòu)造器(constructor)

十分的相像,假如方法和構(gòu)造器上聲明白一個(gè)或多個(gè)類型變量,它們也可以泛型化。

1.publicstatictgetfirst(listlist)

這個(gè)方法將會接受一個(gè)list類型的參數(shù),返回一個(gè)t類型的對象。

例子

你既可以使用java類庫里提供的泛型類,也可以使用自己的泛型類。

類型安全的寫入數(shù)據(jù)…

下面的這段代碼是個(gè)例子,我們創(chuàng)立了一個(gè)list實(shí)例,然后裝入一些數(shù)據(jù):

1.liststr=newarraylist();

2.

3.("hello");

4.

5.("world.");

假如我們試圖在list裝入另外一種對象,編譯器就會提醒錯誤:

1.(1);//不能編譯

類型安全的讀取數(shù)據(jù)…

當(dāng)我們在使用list對象時(shí),它總能保證我們得到的是一個(gè)string對象:

1.stringmystring=(0);

遍歷

類庫中的好多類,諸如iterator,功能都有所加強(qiáng),被泛型化。list接口里的iterator()方法現(xiàn)在返回的是iterator,由它的tnext()方法返回的對象不需要再進(jìn)行類型轉(zhuǎn)換,你直接得到正確的類型。

1.for(iteratoriter=or();t();){

2.

3.strings=();

4.

5.(s);

6.

7.}

使用foreach

“foreach〞語法同樣受益于泛型。前面的代碼可以寫出這樣:

1.for(strings:str){

2.

3.(s);

4.

5.}

這樣既簡單閱讀也簡單維護(hù)。

自動封裝(autoboxing)和自動拆封(autounboxing)

在使用java泛型時(shí),autoboxing/autounboxing這兩個(gè)特征會被自動的用到,就像下面的這段代碼:

1.listints=newarraylist();

2.

3.(0);

4.

5.(1);

6.

7.

8.

9.

sum=0;

11.

(inti:ints){

13.

+=i;

15.

16.}

然而,你要明白的一點(diǎn)是,封裝和解封會帶來性能上的損失,所有,通用要小心的使用。子類型

在java中,跟其它具有面向?qū)ο箢愋偷恼Z言一樣,類型的層級可以被設(shè)計(jì)成這樣:

在java中,類型t的子類型既可以是類型t的一個(gè)擴(kuò)展,也可以是類型t的一個(gè)直接或非直接實(shí)現(xiàn)(假如t是一個(gè)接口的話)。由于“成為某類型的子類型〞是一個(gè)具有傳遞性質(zhì)的關(guān)系,假如類型a是b的一個(gè)子類型,b是c的子類型,那么a也是c的子類型。在上面的圖中:fujiapple(富士蘋果)是apple的子類型

apple是fruit(水果)的子類型

fujiapple(富士蘋果)是fruit(水果)的子類型

所有java類型都是object類型的子類型。

b類型的任何一個(gè)子類型a都可以被賦給一個(gè)類型b的聲明:

1.applea=...;

2.fruitf=a;

泛型類型的子類型

假如一個(gè)apple對象的實(shí)例可以被賦給一個(gè)fruit對象的聲明,就像上面看到的,那么,list和alist之間又是個(gè)什么關(guān)系呢?更通用些,假如類型a是類型b的子類型,那c和c

答案會出乎你的意料:沒有任何關(guān)系。用更通俗的話,泛型類型跟其是否子類型沒有任何關(guān)系。

java泛型簡單例子篇五

泛型總結(jié)篇:

1)泛型參數(shù)只能是類類型

例如:list//報(bào)錯

list//正確

2)泛型的類型參數(shù)可以有多個(gè)!

例如:listlist=new

arraylist();

3)泛型的參數(shù)類型可以使用extends,習(xí)慣稱“有界類型〞,

例如:list,person為list的上界

4)泛型可以使用通配符類型!“?〞相當(dāng)于“object〞類型,(注意不可逆)例如:list//定義成這樣可以添加object類型到list里面去list

;//定義成這樣不可以添加string類型到list里面去list;//這樣就可以互等了!這樣還可以設(shè)定泛型的上限

5)帶泛型的類,構(gòu)造方法寫法不變,其后不可以加泛型!

例如:classstudent{

publicstudent(){}//構(gòu)造方法這樣寫就錯了

}

6)list不是list

的子類!,不可以把前者看成后者的子類,所以不

可以把前者的實(shí)例賦給后者

例如:listslist=newarraylist();

(newstring("abc"));

list

olist=newarraylist

();

("abc");

olist=slist;//報(bào)錯!

7)帶不同泛型參數(shù)的實(shí)例可以共享類的靜態(tài)方法和靜態(tài)變量,所以靜態(tài)方法和靜態(tài)變量

申明的時(shí)候不可以使用類型行參

例如:classcup{

statictinfo;//報(bào)錯!

publicstaticsetinfo(tinfo){};//報(bào)錯!

}

8)帶不同泛型參數(shù)的類是共享一個(gè)字節(jié)碼文件的!反編譯過后泛型參數(shù)就被擦除了

例如:listslist=newarraylist();

(newstring("aaa"));

listilist=newarraylist();

(newinteger(100));

n(ss()==ss());結(jié)果為true;

9)當(dāng)使用定義了泛型參數(shù)的接口和父類的時(shí)候!就不能在帶參數(shù)了例如:classsubextendsfather{}//錯誤

10)

classt{}

publicclasstypetestextendst{}//報(bào)錯

classt{}

publicclasstypetestextendst{}//正確可使用string等基本封裝類型

classt{}

classstudent{}

publicclasstypetestextendst{}//這樣也正確

11)泛型方法,泛型方法的參數(shù)的作用域僅在本方法,要和方法帶泛型區(qū)分開!staticvoidtest(lists_list){}//泛型參數(shù)要放在返回類型前

12)帶有泛型的代碼轉(zhuǎn)換成沒有泛型的代碼由javac完成,虛擬機(jī)不處理這些事情!

這種技術(shù)叫做“擦除〞;

例如:classfood{

tsize;

publicfood(tsize){}//注意構(gòu)造方法不可以帶泛型參數(shù)!

publicvoidsetsize(){=size;}

publictgetsize(){return;}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論