Java泛型知識點全方位總結

前言

我一直認爲泛型是編程語言設計中一個很是基本和重要的概念。Java中的泛型是什麼?他們爲何在那裏?他們是如何發展的?在學習基礎知識時,對仿製藥的透徹理解是很是重要的。所以,我閱讀了《Java編程思想》的通常章節。不幸的是,我沒有太多的經驗,我已經看了好幾回了。咱們未來只能有學習的機會。但我也理解不少。如下是我對仿製藥的理解和理解。若是有什麼錯誤,我但願指出。編程

概念

來源:Java在設計開始以前不是通用的,直到它在JDK 1.5中被引入。Java泛型是經過擦除實現的。你知道什麼是擦除嗎?往下看。框架

概念:常規類和方法只能使用特定類型;基本類型或自定義類。若是要編寫可應用於多種類型代碼的代碼,這種嚴格的限制將對代碼施加很大的約束。泛型實現了參數化類型的概念,使代碼可以應用於多個類型。當泛型在編程語言中出現時,它們的最初目的是但願類和方法具備普遍的表達能力。編程語言

簡單的泛型

出現泛型有不少緣由,其中最重要的一個緣由是建立容器類。咱們暫時不指定類型,但決定之後使用什麼類型。爲了實現這一目標,須要在類名後面使用類型參數,用尖括號括起來。而後,當使用此類時,將用實際類型替換此類型的參數。在下面的示例中,t是類型參數。代碼以下:學習

然而,在許多源代碼中,一些泛型類具備多個泛型參數,例如Java。UTIL功能。雙功能,有三種類型的參數t,u,r。設計

泛型方法

泛型方法使方法獨立於類。在編寫通用代碼時,基本的指導原則是儘量使用通用方法。這意味着,若是能夠對整個類使用泛型方法而不是泛型方法,那麼可使用泛型方法,由於它們可使事情更清楚。此外,對於靜態方法,不能訪問泛型類的類型參數,所以若是靜態方法須要使用泛化功能,則必須將它們變爲泛型方法。對象

泛型的擦除

當我讀了Java編程思想的通常章節中的「被刪除的奧祕」部分時,我特別頭暈,而後當我向下看時,我變得愈來愈困惑。尤爲是當你看邊界和通配符的時候,它有點使人困惑。首先看看什麼是擦除。在泛型代碼中,有關泛型參數類型的信息不可用。Java泛型是經過擦除實現的,這意味着當使用泛型時,任何特定的類型都會被擦除,而您所知道的惟一一件事就是使用對象。因爲Java最初沒有引入泛型,因此它被設計成與舊版本的JDK兼容。ErAcess是Java通用實現之間的折衷。所以,當您運行時,list<string>與list<integer>相同。請注意,它正在運行,但在編譯時,list<string>表示此字符串類型的列表容器,list<integer>表示當前整數類型的列表容器。例如,來自Java編程思想的例子。blog

泛型的邊界

Java中的泛型,當編譯時,T表示一種類型,若是沒有指定邊界,它就等於對象。咱們可使用extends關鍵字爲泛型指定邊界。爲了可以調用f(),咱們能夠在給定泛型類邊界的狀況下幫助泛型類,告訴編譯器必須接受邊界後面的類型。這裏使用擴展關鍵字。將上述代碼更改成字符串

總結

對於 ? extends Class ,? extends T,? super T,不是很理解的,能夠本身把例子寫一下,而後想想。Java 泛型的特性在不少開源的框架上是用的很是多的。這快須要深刻的理解一下,我想隨着敲代碼的年限上,應該到了後面會有不同得理解吧。如今經過書上可以知道,理解得就只有這麼多了。編譯器

相關文章
相關標籤/搜索