ClassCaseException:類型轉換異常。
代碼中不加泛型,編譯沒問題,運行可能會發生異常。但是用戶解決不了,這樣程序就存在安全隱患。所以我們希望在編譯時期就能看出問題,程序員解決看后到運行時期就沒有問題了。
問題產生的原因:往集合里面存了不同元素造成的。
泛型:JDK1.5版本以后出現新特性,用于解決安全問題,是一個類型安全機制。
好處:
1,將運行時期出現問題ClassCastException,轉移到了編譯時期,方便于程序員解決問題。讓運行事情問題減少,安全。
2,避免了強制轉換麻煩。
泛型格式:通過<>來定義要操作的引用數據類型。
在使用java提供的對象時,什么時候寫泛型呢?通常在集合框架中很常見,只要見到<>就要定義泛型。其實<>就是用來接收類型的。
當使用集合時,將集合中要存儲的數據類型作為參數傳遞到尖括號中即可。
什么時候定義泛型類?
當類中要操作的引用數據類型不確定時,早期定義Object來完成擴展,現在定義泛型類完成擴展。
泛型定義在類上:泛型類定義的泛型,在整個類中有效,如果被方法使用,那么泛型類的對象明確要操作的具體類型后,所有要操作的類型就已經固定了。
泛型定義在方法上:為了讓不同的方法可以操作不同類型,而且類型還不確定,那么可以將類型定義在方法上。
注意泛型定義在方法上,是放在返回值類型的前面,修飾符的后面。
注意特殊之處:靜態方法不可以訪問類上定義的泛型。如果靜態方法操作的引用數據類型不明確,可以將泛型定義在方法上。(靜態泛型不能隨著類的泛型走)
泛型定義在接口上。見到帶泛型的內容的時候,用的時候往里面傳參數。這個應用一般不多見,是Java定義好就直接拿來用。
當我們創建兩個操作不同類型的集合時,不需要寫兩個迭代器。
“?”:通配符。也可以理解為占位符。
泛型的限定:是用于泛型擴展用的。
1,? extends E: 可以接收E類型或者E的子類型。(上限)
2,? super E : 可以接收E類型或者E的父類型。(下限)
。。。
|
新聞熱點
疑難解答