泛型基礎和作用

2021-08-22 14:42:14 字數 1353 閱讀 8634

泛型是jdk5才引進的,泛型其實指得就是引數化型別,使得**可以適應多種型別。像容器,list< t >,大量使用了泛型,它的主要目的之一就是用來指定容器要持有什麼型別的物件。我認為,泛型的好處很多:

當沒有使用泛型的情況下,建立了乙個狗的列表,list dogs = new arraylist,每次要往狗列表新增時,都要我們程式設計師去確定所新增的是不是狗。但是使用了泛型,list< dog> dogs = new arraylist< dog>,當新增的不是狗是,編譯器會發現並報錯。所以他保證了型別安全。

消除了**中大量的型別轉換,使得**可讀性更高,使**更加優雅。

一般當我們對於一段**,我們更喜歡後期決定他的型別,要達到這種目的,就使用泛型和泛型的型別引數。< t>。這個t就是型別引數。例如假如我要通過乙個類,傳入特定的物件進行特定的處理,再把物件返回,這時就很適合使用泛型了。

在泛型的初始實現中,編譯器將強制型別轉換(沒有泛型的話,程式設計師會指定這些強制型別轉換)插入生成的位元組碼中。但是更多型別資訊可用於編譯器這一事實,為未來版本的 jvm 的優化帶來可能。由於泛型的實現方式,支援泛型(幾乎)不需要 jvm 或類檔案更改。所有工作都在編譯器中完成,編譯器生成類似於沒有泛型(和強制型別轉換)時所寫的**,只是更能確保型別安全而已。

元組的作用是將一組物件直接打包到儲存於其中的乙個單一物件中。這個物件允許讀取其中元素,但是不允許向其中存放新的物件。

假設你有這樣的需求,通過一次方法呼叫,則返回多個物件。當然,可以這樣實現,通過建立乙個物件,讓這個物件去持有你所需的多個物件,然胡返回建立的這個物件。但是,這樣每一次我們需要的時候,都要建立這樣的乙個類。當我們有了泛型,這需求就能很簡單的實現。

下面是乙個三維元組:

public class tuple

public string tostring()

}

泛型介面和泛型類其實並沒有什麼太大區別,都是持有物件

public inte***ce tuple
泛型方法有乙個基本原則,盡量使用泛型方法而不是泛型類。只要能夠用泛型方法達到需求,就應該只用泛型方法,這樣能使得**更加清晰。 

泛型方法的定義:泛型引數列表置於返回值前,例如 public < t> void f(t t)

public class genericmethods 

public static void main(string args)

}

結果為:

string

integer

double

float

character

genericmethods

泛型 泛型簡介和泛型類

在泛型引入之前,如果我們需要產生多個物件,每個物件的邏輯完全一樣,只是物件內的成員變數的型別不同,那麼我們只能建立多個類檔案,給每個類的成員變數設定不同的資料型別。這麼做會導致類的膨脹,重用性太差。一種方式是對將object作為變數型別,但是需要對獲取的資料進行強制型別轉換,這個過程可能導致型別轉換...

泛型和非泛型

原帖 泛型和非泛型 一 區別 1 非泛型類容器來說,該容器的元素型別是 object 使用方便,無須指定具體的元素型別。但是這種使用上的方便帶來了慘重的效能上的損失,因為,我們每次插入乙個元素就要經過一次 裝箱 操作,每次訪問乙個元素就要經過一次 拆箱 操作。arraylist hashtable ...

Dart基礎 泛型和庫

如果你看過api文件的基本型別陣列和列表,你會發現實際上所有都是泛型,使用泛型可以提高 的可讀性 var names new list names.addall seth kathy lars 檢查模式編譯失敗,生產模式編譯成功 names.add 42 使用泛型的另乙個原因是減少 重複,泛型可以建...