Java中的泛型方法

A00000李發表於2020-12-06

泛型是什麼意思在這就不多說了,而Java中泛型類的定義也比較簡單,例如:public class Test<T>{}。這樣就定義了一個泛型類Test,在例項化該類時,必須指明泛型T的具體型別,例如:Test<Object> t = new Test<Object>();,指明泛型T的型別為Object。
但是Java中的泛型方法就比較複雜了。
泛型類,是在例項化類的時候指明泛型的具體型別;泛型方法,是在呼叫方法的時候指明泛型的具體型別。

   **定義泛型方法**語法格式如下:
7498199-be7c026cbd145f8f.png
   **呼叫泛型方法**語法格式如下:
7498199-41ec0d0951193f89.png
   說明一下,定義泛型方法時,必須在返回值前邊加一個<T>,來宣告這是一個泛型方法,持有一個泛型T,然後才可以用泛型T作為方法的返回值。
   Class<T>的作用就是指明泛型的具體型別,而Class<T>型別的變數c,可以用來建立泛型類的物件。
   為什麼要用變數c來建立物件呢?既然是泛型方法,就代表著我們不知道具體的型別是什麼,也不知道構造方法如何,因此沒有辦法去new一個物件,但可以利用變數c的newInstance方法去建立物件,也就是利用反射建立物件。
   泛型方法要求的引數是Class<T>型別,而Class.forName()方法的返回值也是Class<T>,因此可以用Class.forName()作為引數。其中,forName()方法中的引數是何種型別,返回的Class<T>就是何種型別。在本例中,forName()方法中傳入的是User類的完整路徑,因此返回的是Class<User>型別的物件,因此呼叫泛型方法時,變數c的型別就是Class<User>,因此泛型方法中的泛型T就被指明為User,因此變數obj的型別為User。
   當然,泛型方法不是僅僅可以有一個引數Class<T>,可以根據需要新增其他引數。
   為什麼要使用泛型方法呢?因為泛型類要在例項化的時候就指明型別,如果想換一種型別,不得不重新new一次,可能不夠靈活;而泛型方法可以在呼叫的時候指明型別,更加靈活。

相關文章