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