泛型的一些理解

2021-07-23 22:43:49 字數 1307 閱讀 7311

泛型是為了解決型別不確定的問題,業務邏輯相同只有物件型別不同。

是屬於編譯期的,編譯器編譯完之後,帶有泛型的程式,生成的.class位元組碼檔案中將不存在泛型。以此使程式在執行時效率不受影響,這個過程被稱為泛型「擦除」。

泛型泛型又可以分為集合泛型和自定義泛型。

一、集合泛型

list list1 = new arraylist();//正確的

listlist2 = new arraylist();//正確的

listlist3 = new arraylist();//正確的,相容以前的方法的返回值

list list4 = new arraylist();//正確的,相容以前的方法的形參

listlist5 = new arraylist();//錯誤的

listlist6 = new arraylist();//錯誤的

(泛型沒有繼承關係,所有list5和list6是錯誤的。)

集合泛型可以兩邊都沒有,也可以一邊有一邊沒有;可以兩邊都有,一旦兩邊都有的,兩邊"必須一致".

void print(collection<?> c)

}

這個時候業務邏輯是相同的,只有泛型的型別沒有確定下來,而泛型內是沒有繼承關係的,使用?可以解決「泛型引用」應用不同的泛型實現,個人認為?(泛型萬用字元)是在變數宣告級別的、

這時候寫object可能太大了,業務邏輯不方便實現,所以可以使用extends來指定上屆去限定以下父類,從而更方便的實現業務邏輯。

二、自定義泛型

1.定義在方法上的泛型

定義在方法上的泛型,只能在當前方法內部使用。

2.定義在類上的泛型

類上的泛型在類名後面定義,作用域是整個類、在類上定義的泛型不能在該類的靜態方法上使用,如果想在靜態方法上使用,需要單獨定義

//建立乙個簡單工廠類,

public class basicfactory

public static basicfactory getfactory()

@suppresswarnings("unchecked")

public t getinstance(classclz) catch (exception e)

} }

例項化物件

userdao dao = basicfactory.getfactory().getinstance(userdao.class);

userdao.class的返回值型別是class的,所以當用getinstance()呼叫方法的時候,可以把t的型別確定為userdao型別的、

泛型的一些問題

泛型的概念 把型別明確工作推遲到建立物件或者呼叫方法時才明確的一種機制 泛型的語法 引用型別,引用型別 使用泛型好處是避免了向下轉型,例如集合中的元素 如果不使用泛型,取出元素後,需要向下轉型成為本類才可以獲得 arraylist arraylist newarraylist arraylist.a...

stl 泛型的一些基本

一 泛型程式設計的一些基本 1 泛型程式設計 1.1 程式盡可能的通用。1.2 將演算法從資料結構中抽象出來,成為通用。1.3 模板並不是單純的函式,不能憑空的生成,是用來產生 的 可以減少 量。1.4 template 中不要使用class,使用typename 1.5 模板程式設計與巨集的區別 ...

關於泛型容器的一些使用

最近工作碰到的。如果你要儲存大量資料,而且還要給他排好序。那麼最好使用deque,因為vector太浪費記憶體,list會造成記憶體碎片,而且定位也慢,map雖然定位很快,也很方便,但是消耗的記憶體比較多,也比較容易出現記憶體碎片。deque是以記憶體塊分配,首先不會造成太大的記憶體浪費,在新增資料...