泛型是為了解決型別不確定的問題,業務邏輯相同只有物件型別不同。
是屬於編譯期的,編譯器編譯完之後,帶有泛型的程式,生成的.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是以記憶體塊分配,首先不會造成太大的記憶體浪費,在新增資料...