引數化型別可以引用乙個原始型別的物件,編譯報告警告,例如,
collectionc = new vector();//可不可以,不就是編譯器一句話的事嗎?
原始型別可以引用乙個引數化型別的物件,編譯報告警告,例如,
collection c = new vector();//原來的方法接受乙個集合引數,新的型別也要能傳進去
引數化型別不考慮型別引數的繼承關係:
vectorv = new vector(); //錯誤!///不寫沒錯,寫了就是明知故犯
vectorv = new vector(); //也錯誤!
編譯器不允許建立泛型變數的陣列。即在建立陣列例項時,陣列的元素不能使用引數化的型別,例如,下面語句有錯誤:
vectorvectorlist = new vector[10];
泛型中的型別引數嚴格說明集合中裝載的資料型別是什麼和可以加入什麼型別的資料,注意:collection和collection是兩個沒有轉換關係的引數化的型別。
假設vectorv = new vector();可以的話,那麼以後從v中取出的物件當作string用,而v實際指向的物件中可以加入任意的型別物件;假設vectorv = new vector();可以的話,那麼以後可以向v中加入任意的型別物件,而v實際指向的集合中只能裝string型別的物件。肯定會報錯了
泛型類的注意事項
1.泛型類如果沒有指定具體型別,此時操作型別為object 2.泛型的型別引數只能是類型別,不能是基本資料型別 employee int e new employee 錯誤 3.泛型型別在邏輯上可以看成多個不同型別,但是實際上都是相同型別 employeee1 new employee employ...
泛型的使用方法以及注意事項
1使用泛型可以解決型別轉換的問題 在編譯器發現問題,而不是執行期才發現 2泛型只能是引用型別,不能是基本型別 3方法中如果有泛型,那麼傳入的引數型別必須和方法中宣告的型別完全一致 如果希望方法中的泛型可以接收任意型別那麼不能使用object,可以使用萬用字元?問號 4乙個泛型類的引數可以是一般的引用...
c 泛型庫罕見編寫注意事項
由於operator,逗號運算子 過載存在,泛型庫對於 if a 123 這樣的逗號連線表示式應在中間插入 void 如 a void 213。由於operator 取址運算子 過載存在,泛型庫應使用std addressof取位址 for auto element container 由於cont...