java泛型方法
Java中的泛型方法
泛型是什麼意思在這就不多說了,而Java中泛型類的定義也比較簡單,例如:public class Test<T>{}。這樣就定義了一個泛型類Test,在例項化該類時,必須指明泛型T的具體型別,例如:Test<Object> t = new Test<Object>();,指明泛型T的型別為Object。
但是Java中的泛型方法就比較複雜了。
泛型類,是在例項化類的時候指明泛型的具體型別;泛型方法,是在呼叫方法的時候指明泛型的具體型別。
定義泛型方法語法格式如下:
呼叫泛型方法語法格式如下:
說明一下,定義泛型方法時,必須在返回值前邊加一個<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一次,可能不夠靈活;而泛型方法可以在呼叫的時候指明型別,更加靈活。
附:Java泛型方法演示程式碼。
轉載來源:https://www.cnblogs.com/iyangyuan/archive/2013/04/09/3011274.html