泛型方法,是在調(diào)用方法的時(shí)候指明泛型的具體類(lèi)型。
定義泛型方法語(yǔ)法格式:
調(diào)用泛型方法語(yǔ)法格式:
說(shuō)明一下,定義泛型方法時(shí),必須在返回值前邊加一個(gè),來(lái)聲明這是一個(gè)泛型方法,持有一個(gè)泛型T,然后才可以用泛型T作為方法的返回值。
Class的作用就是指明泛型的具體類(lèi)型,而Class類(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類(lèi)型,而Class.forName()方法的返回值也是Class,因此可以用Class.forName()作為參數(shù)。其中,forName()方法中的參數(shù)是何種類(lèi)型,返回的Class就是何種類(lèi)型。在本例中,forName()方法中傳入的是User類(lèi)的完整路徑,因此返回的是Class類(lèi)型的對(duì)象,因此調(diào)用泛型方法時(shí),變量c的類(lèi)型就是Class,因此泛型方法中的泛型T就被指明為User,因此變量obj的類(lèi)型為User。
當(dāng)然,泛型方法不是僅僅可以有一個(gè)參數(shù)Class,可以根據(jù)需要添加其他參數(shù)。
為什么要使用泛型方法呢?
因?yàn)榉盒皖?lèi)要在實(shí)例化的時(shí)候就指明類(lèi)型,如果想換一種類(lèi)型,不得不重新new一次,可能不夠靈活;而泛型方法可以在調(diào)用的時(shí)候指明類(lèi)型,更加靈活。