天天看點

java泛型

泛型接口:

定義一個泛型接口:

java泛型

通過類去實作這個泛型接口的時候指定泛型T的具體類型。

指定具體類型為Integer:

java泛型

指定具體類型為String:

java泛型

指定具體類型為一個自定義的對象:

java泛型

泛型類:

在編譯器,是無法知道K和V具體是什麼類型,隻有在運作時才會真正根據類型來構造和配置設定記憶體。

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泛型

總結:泛型的使用使我們的代碼更加具有通用性,不會導緻定義了一種類型之後其他的類型都無法使用該代碼。

   通過泛型可以定義類型安全的資料結構(類型安全),而無須使用實際的資料類型(可擴充)。這能夠顯著提高性能并得到更高品質的代碼(高性能),因為您可以重用資料處理算法,而無須複制類型特定的代碼(可重用)。

繼續閱讀