Java中的泛型方法詳解及簡(jiǎn)單實(shí)例
java 泛型方法:
泛型是什么意思在這就不多說(shuō)了,而Java中泛型類(lèi)的定義也比較簡(jiǎn)單,例如:public class Test<T>{}。這樣就定義了一個(gè)泛型類(lèi)Test,在實(shí)例化該類(lèi)時(shí),必須指明泛型T的具體類(lèi)型,例如:Test<Object> t = new Test<Object>();,指明泛型T的類(lèi)型為Object。
但是Java中的泛型方法就比較復(fù)雜了。
泛型類(lèi),是在實(shí)例化類(lèi)的時(shí)候指明泛型的具體類(lèi)型;泛型方法,是在調(diào)用方法的時(shí)候指明泛型的具體類(lèi)型。
定義泛型方法語(yǔ)法格式如下:
調(diào)用泛型方法語(yǔ)法格式如下:
說(shuō)明一下,定義泛型方法時(shí),必須在返回值前邊加一個(gè)<T>,來(lái)聲明這是一個(gè)泛型方法,持有一個(gè)泛型T,然后才可以用泛型T作為方法的返回值。
Class<T>的作用就是指明泛型的具體類(lèi)型,而Class<T>類(lèi)型的變量c,可以用來(lái)創(chuàng)建泛型類(lèi)的對(duì)象。
為什么要用變量c來(lái)創(chuàng)建對(duì)象呢?既然是泛型方法,就代表著我們不知道具體的類(lèi)型是什么,也不知道構(gòu)造方法如何,因此沒(méi)有辦法去new一個(gè)對(duì)象,但可以利用變量c的newInstance方法去創(chuàng)建對(duì)象,也就是利用反射創(chuàng)建對(duì)象。
泛型方法要求的參數(shù)是Class<T>類(lèi)型,而Class.forName()方法的返回值也是Class<T>,因此可以用Class.forName()作為參數(shù)。其中,forName()方法中的參數(shù)是何種類(lèi)型,返回的Class<T>就是何種類(lèi)型。在本例中,forName()方法中傳入的是User類(lèi)的完整路徑,因此返回的是Class<User>類(lèi)型的對(duì)象,因此調(diào)用泛型方法時(shí),變量c的類(lèi)型就是Class<User>,因此泛型方法中的泛型T就被指明為User,因此變量obj的類(lèi)型為User。
當(dāng)然,泛型方法不是僅僅可以有一個(gè)參數(shù)Class<T>,可以根據(jù)需要添加其他參數(shù)。
為什么要使用泛型方法呢?因?yàn)榉盒皖?lèi)要在實(shí)例化的時(shí)候就指明類(lèi)型,如果想換一種類(lèi)型,不得不重新new一次,可能不夠靈活;而泛型方法可以在調(diào)用的時(shí)候指明類(lèi)型,更加靈活。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
出現(xiàn)次數(shù)超過(guò)一半(50%)的數(shù)
給出n個(gè)數(shù),需要我們找出出現(xiàn)次數(shù)超過(guò)一半的數(shù),下面小編給大家分享下我的實(shí)現(xiàn)思路及關(guān)鍵代碼,感興趣的朋友一起學(xué)習(xí)吧2016-07-07Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn)
這篇文章主要介紹了Spring中使用JSR303請(qǐng)求約束判空的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12關(guān)于replaceFirst使用時(shí)的注意事項(xiàng)
這篇文章主要介紹了關(guān)于replaceFirst使用時(shí)的注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03JAVA連接到SQLserver的步驟方法以及遇到的問(wèn)題
java相對(duì)于其他語(yǔ)言(例如c,c++等)連接數(shù)據(jù)庫(kù)要方便得多,下面這篇文章主要給大家介紹了關(guān)于JAVA連接到SQLserver的步驟方法及遇到的問(wèn)題,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06解決ThingsBoard編譯報(bào)錯(cuò)問(wèn)題:Failure?to?find?org.gradle:gradle-too
這篇文章主要介紹了ThingsBoard編譯報(bào)錯(cuò):Failure?to?find?org.gradle:gradle-tooling-api:jar:6.3,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03jar命令修改jar包中的application.yml配置文件
本文主要介紹了jar命令修改jar包中的application.yml配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Java優(yōu)化重復(fù)冗余代碼的8種方式總結(jié)
日常開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到一些重復(fù)代碼,最近小編優(yōu)化了一些系統(tǒng)中的重復(fù)代碼,用了好幾種的方式,感覺(jué)挺有用的,所以本文給大家講講優(yōu)化重復(fù)代碼的幾種方式2023-08-08