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