1. 程式人生 > >Java中的泛型方法

Java中的泛型方法

pan sta 有一個 println 泛型方法 判斷 調用方法 user instant

這是一個轉載的博客

這是一個轉載的博客

這是一個轉載的博客

  泛型是什麽意思在這就不多說了,而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一次,可能不夠靈活;而泛型方法可以在調用的時候指明類型,更加靈活。

再加上原作者的代碼:

 1 /**
 2  * 泛型演示類
 3  * @author 楊元
 4  *
 5  */
 6 public class Generic {
 7     /**
 8      * 泛型方法
 9      * @param <T> 聲明一個泛型T
10      * 
@param c 用來創建泛型對象 11 * @return 12 * @throws InstantiationException 13 * @throws IllegalAccessException 14 */ 15 public <T> T getObject(Class<T> c) throws InstantiationException, IllegalAccessException{ 16 //創建泛型對象 17 T t = c.newInstance(); 18 return t; 19 } 20 }
 1 /**
 2  * 測試實體模型
 3  * @author 楊元
 4  *
 5  */
 6 public class User {
 7     private String uid;
 8     private String pwd;
 9     
10     public String getUid() {
11         return uid;
12     }
13     public void setUid(String uid) {
14         this.uid = uid;
15     }
16     public String getPwd() {
17         return pwd;
18     }
19     public void setPwd(String pwd) {
20         this.pwd = pwd;
21     }
22     
23 }
 1 /**
 2  * 泛型調用演示
 3  * @author 楊元
 4  *
 5  */
 6 public class GenericTest {
 7     public static void main(String[] args) 
      throws InstantiationException, IllegalAccessException, ClassNotFoundException{ 8 9 Generic generic = new Generic(); 10 //調用泛型方法 11 Object obj = generic.getObject(Class.forName("User")); 12 //判斷obj的類型是否是指定的User類型 13 System.out.println(obj instanceof User); 14 } 15 }

最後可能還要加上我的一些話吧。我先看看書,看完了再寫。

Java中的泛型方法