泛型方法
泛型介面
型別擦除、
泛型的注意點
集合容器類在設計階段/宣告階段不能確定這個容器到底實際存的是什麼型別的物件,
所以在jdk1.5之前只能把元素型別設計為object,jdk1.5之後使用泛型來解決。
因為這個時候除了元素的型別不確定,其他的部分是確定的,例如關於這個元素如何
儲存,如何管理等是確定的,因此此時把元素的類設計成乙個引數,這個型別引數
叫做泛型。
所謂泛型,就是允許在定義類、介面時通過乙個標識表示類中某個屬性的類
型或者是某個方法的返回值及引數型別。這個型別引數將在使用時( 例如,
繼承或實現這個介面,用這個型別宣告變數、建立物件時)確定(即傳入實
際的型別引數,也稱為型別實參)。collection, list,
arraylist這個就是型別引數,即泛型。
class
myclass
public
class
test1
}
class
mclass
public
class
test1
}
泛型類的使用-萬用字元(wildcards)? 用於在泛型的使用,即為萬用字元
public
class
myarraylist
// 可以傳入任意型別的 myarraylist
public
static
void
printall
(myarraylist<
?> list)
// 以下呼叫都是正確的
printall
(new
myarraylist
());
printall
(new
myarraylist
());
printall
(new
myarraylist
());
printall
(new
myarraylist
());
printall
(new
myarraylist
());
<
?extends 上
// 可以傳入型別實參是 number 子類的任意型別的 myarraylist
public
static
void
printall
(myarraylist<
?extends
number
> list)
<
?super 下
// 可以傳入型別實參是 integer 父類的任意型別的 myarraylist
public
static
void
printall
(myarraylist<
?super integer> list)
在方法宣告時用表示的方法,中的t稱為型別引數,而方法中的t被稱為引數
化型別,他不是執行時真正的引數
public
void
fun(t t)
public
t test
(t t)
class
myclass2
}public
class
test1
}
inte***ce
isubject
class
sujectimpl
implements
isubject
}
2)子類實現介面時仍然保留泛型
class
subjectimpl2
implements
isubject
}
泛型是作用在編譯期間的一種機制,實際上執行期間是沒有這麼多類的,那執行期間
是什麼型別呢?這裡就是型別擦除在做的事情
jdk 1.5引入 泛型只存在於編譯階段,在進入jvm之前,與泛型有關的資訊會被完全擦除 泛型類再進行型別擦除時,未指定泛型的上限,泛型相關資訊會被擦除位object型別,如果有上限,擦除為對應型別的上限。
class
myclass
number
>
t>>>object
e>>>number
泛型型別引數不支援基本資料型別
無法例項化泛型型別的物件
無法使用泛型型別宣告靜態的屬性
無法使用 instanceof 判斷帶型別引數的泛型型別
無法建立泛型類陣列
無法 create、catch、throw 乙個泛型類異常(異常不支援泛型)
泛型型別不是形參一部分,無法過載
泛型**與jvm ① 虛擬機器中沒有泛型,只有普通類和方法。 ② 在編譯階段,所有泛型類的型別引數都會被object或者它們的限定邊界來替換。(型別擦除) ③ 在繼承泛型型別的時候,橋方法的合成是為了避免型別變數擦除所帶來的多型災難。 無論我們如何定義乙個泛型型別,相應的都會有乙個原始型別被自動提供。原始型別的名字就是擦除型別引數的泛型型別的名字。
yaf mysql 你了解Yaf 是什麼嘛
yaf 是什麼 yaf,全稱 yet another framework,是乙個c語言編寫的 基於php擴充套件開發的php框架。相比於一般的php框架,它更快,快到被譽為最快的php開發框架。它提供了bootstrap 路由 分發 檢視 外掛程式功能。yaf 的優點用c語言開發的php框架,相比原...
深入了解泛型
泛型是為編譯器用的 例如arraylistcollection new arraylist collection.add abb 編譯器會報錯 通過反射 collection.getclass getmethod add object.class invoke collection,sd 因為編譯器...
泛型 泛型類 泛型方法 泛型擦除
1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...