本文主要介紹java泛型編寫(xiě)(用java泛型?和t),下面一起看看java泛型編寫(xiě)(用java泛型?和t)相關(guān)資訊。
java-泛型泛型描述泛型是jdk5中引入的新特性。泛型提供了編譯時(shí)類(lèi)型安全檢測(cè)機(jī)制,允許程序員在編譯時(shí)檢測(cè)非法類(lèi)型。
泛型的本質(zhì)是參數(shù)化類(lèi)型,就是為一個(gè)類(lèi)型指定一個(gè)參數(shù),然后在使用的時(shí)候指定這個(gè)參數(shù)的具體值,這樣在使用的時(shí)候就可以確定類(lèi)型了。這種參數(shù)類(lèi)型可以用在類(lèi)、接口和方法中,分別稱(chēng)為泛型類(lèi)、泛型接口和泛型方法。
為什么要用泛型?泛型的好處是在編譯時(shí)檢查類(lèi)型安全,所有強(qiáng)制都是自動(dòng)隱式的,提高了代碼的復(fù)用率。
安全
//集合不使用泛型list list = new arraylist;list . add( 微笑 );list . add(30);//正常編譯//集合使用泛型liststring new list = new arraylist;new list . add( 微笑 );new list . add(30);//編譯時(shí)沒(méi)有正確使用泛型后,編譯定義的集合newlist時(shí),add(30)會(huì)編譯失敗。
相當(dāng)于告訴編譯器每個(gè)集合接收的是什么類(lèi)型的對(duì)象,編譯器會(huì)在編譯時(shí)檢查類(lèi)型,判斷是否插入了錯(cuò)誤類(lèi)型的對(duì)象,這使得程序更加安全,增強(qiáng)了程序的健壯性。
消除轉(zhuǎn)換
//不使用泛型list list = new arraylist;list . add( 微笑 );string name =(string)list . get(0);//使用泛型liststring new list = new arraylist;new list . add( 微笑 );string newname = new list . get(0);使用泛型的另一個(gè)好處是消除了代碼中的許多強(qiáng)制類(lèi)型轉(zhuǎn)換,這使得代碼更具可讀性,并減少了出錯(cuò)的機(jī)會(huì)。
提高性能
在非泛型編程中,將簡(jiǎn)單類(lèi)型作為對(duì)象傳遞會(huì)導(dǎo)致裝箱和取消裝箱操作,這兩種操作的開(kāi)銷(xiāo)都非常大。引入泛型后,裝箱和拆箱操作不再需要,所以運(yùn)行效率相對(duì)較高,尤其是在集合操作頻繁的系統(tǒng)中,該特性帶來(lái)的性能提升更為明顯。
泛型變量有固定的類(lèi)型,使用時(shí)已經(jīng)知道是值類(lèi)型還是引用類(lèi)型,避免了不必要的裝箱和解包操作。
復(fù)用性
提高了代碼的可重用性。
使用泛型泛型有三種使用方法
通用類(lèi)
在類(lèi)上定義泛型
公共類(lèi)classname t {}泛型類(lèi)型必須是引用類(lèi)型(非基元數(shù)據(jù)類(lèi)型)。
listint list = new arraylist;//編譯異常使用泛型數(shù)組,無(wú)法初始化。
class generictestt { private t[]值;public void setvalue(t value){ this . values = new t[3];//編譯異常} }//由于數(shù)組已初始化,需要開(kāi)辟內(nèi)存空間。當(dāng)具體類(lèi)型不明確時(shí),編譯器可以 無(wú)法公開(kāi)確切的空間大小。類(lèi)的泛型可以 不能在靜態(tài)方法中使用。
class generic testt { private t value;公共靜態(tài)void測(cè)試(tvalue){//編譯異常system . out . println(value);} }//因?yàn)殪o態(tài)方法單獨(dú)屬于類(lèi),而類(lèi)的泛型屬于對(duì)象聲明的靜態(tài)屬性,所以不能使用類(lèi)的泛型。
class generictestt {私有靜態(tài)t值;//編譯異常公共泛型測(cè)試(tvalue) {system。out.println(值);} }//因?yàn)殪o態(tài)屬性單獨(dú)屬于類(lèi),而類(lèi)的泛型屬于聲明的對(duì)象定義泛型類(lèi),所以在類(lèi)名后面加一對(duì)尖括號(hào),在尖括號(hào)里填入類(lèi)型參數(shù)??梢杂卸鄠€(gè)參數(shù),用多個(gè)參數(shù)來(lái)分隔。
公共類(lèi)classnam:任意型
:集中的元素類(lèi)型元素。
k: k:key-value表單值
通用
public class generic { public static void main(string[]args){ genericteststring generic = new generic test( 微笑 );system . out . println(generic . getvalue);} }//定義泛型類(lèi)generic testt { private tvalue公共圖書(shū)館ic generictest(t值){ this.value = value} public t getvalue {返回值;} public void setvalue(t value){ this . value = value;}}通用接口
在接口上定義泛型
通用接口使用的公共接口接口名稱(chēng)t {}。
繼承和利用
接口generic interface a t { t run(t value);}//不指定泛型類(lèi),默認(rèn)使用對(duì)象接口泛型接口擴(kuò)展泛型接口{ }//繼續(xù)使用父接口泛型。不要指定特定的泛型接口泛型接口擴(kuò)展泛型接口{}//為實(shí)現(xiàn)指定特定的泛型類(lèi)型接口泛型接口擴(kuò)展泛型接口{ }。
//接口實(shí)現(xiàn)時(shí),不指定具體的泛型類(lèi),默認(rèn)為對(duì)象類(lèi)泛型類(lèi)a實(shí)現(xiàn)者泛型接口a { @ override public object run(object value){ return null;} }//在接口實(shí)現(xiàn)過(guò)程中,指定具體的泛型類(lèi)c類(lèi)實(shí)現(xiàn)泛型接口string { @ override public string run(string value){ return null;} }//接口繼承時(shí)已經(jīng)指定接口繼承泛型,不需要指定類(lèi)泛型d類(lèi)實(shí)現(xiàn)者generic interface { @ override public string run(string value){ return null;}}通用方法
在方法上定義泛型
public t returntype函數(shù)名(t variablename) {}泛型方法可以是普通方法、靜態(tài)方法或構(gòu)造函數(shù)方法。
類(lèi)genericclassa實(shí)現(xiàn)genericinterfacea { @ override public object run(object value){ return null;}//構(gòu)造函數(shù)public t泛型類(lèi)a (t name) {system。out.println(名稱(chēng));}//公共方法public t void test a (t name) {system。out.println(名稱(chēng));}//靜態(tài)方法public static t void testb(tname){ system . out . println(name);}}是否有泛型方法與其類(lèi)是否泛型無(wú)關(guān)。
使用泛型方法時(shí),通常不需要指定類(lèi)型參數(shù),因?yàn)榫幾g器會(huì)為我們找出具體的類(lèi)型。這被稱(chēng)為類(lèi)型參數(shù)推理。類(lèi)型推理只對(duì)賦值操作有效,它不 不要在其他時(shí)間工作。
public class generic { public static void main(string[]args){ generic function generic function = new generic function;//會(huì)自動(dòng)類(lèi)型推理generic function . run( 微笑 );} } class generic function { public t void run(t name){ system . out . println(name);}}標(biāo)簽:
類(lèi)型方法
了解更多java泛型編寫(xiě)(用java泛型?和t)相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。