2022-10-20
泛型 類型 map
第三關 領略泛型之美
走到這里,相信小伙伴們已經知道泛型的基本使用了,那么泛型之美到底體現(xiàn)在什么地方呢? 我們一起揭開這位“美人”的神秘面紗。
泛型之美具體體現(xiàn)如下三個方面:
1. 編譯期間類型檢查。
如下代碼:
Setset = new HashSet();//指定set集合的泛型為Integer
set.add(100);//添加數(shù)字
set.add("java");//報編譯期間異常:集合的泛型為Integer,不能添加String的字符串
來,小伙們我們來分析下這段代碼:
1.我們創(chuàng)建了一個帶Integer泛型的Set集合對象,指定Set集合只能添加Integer類型的數(shù)據(jù)
2.如果添加其它類型的數(shù)據(jù),java的編譯器就會檢查,并且提示錯誤信息,就好像老師檢查作業(yè)一樣,在出錯的地方標記紅線。
在編譯過程,java的編譯器都會自動檢查添加的數(shù)據(jù)與我們指定的泛型是否一致,以后再也不怕添加錯誤的數(shù)據(jù)了,很贊吧。
2. 避免強轉類型轉換
如下代碼:
//1.定義沒有泛型的方法: 創(chuàng)建對象
public static Object createObj(Object obj){
return obj;
}
//2.定義有泛型的方法: 創(chuàng)建對象
public staticT createT(T t){
return t;
}
//3.測試
public static void main(String[] args) {
Date date1 = (Date) createObj(new Date());//沒有泛型的方法: 類型強轉
Date date2 = createT(new Date());//有泛型的方法:不需要類型強轉
}
為了加強對比,我們定義了兩個方法,一個帶泛型,一個不帶泛型。
根據(jù)測試的結果,顯而易見:
帶泛型的方法在創(chuàng)建對象時,傳入什么類型,就得到什么類型的對象
不帶泛型的方法,根據(jù)傳入的類型獲取對象時,需要強制轉換一下。
所以我們在開發(fā)中,特別是在定義創(chuàng)建對象的方法時,一般都使用泛型來進行定義,從而避免后期的類型強轉。
3. 可讀性和靈活性
如下代碼:
public class GenericDemo6 {
public static void main(String[] args) {
//1.帶泛型的map集合
Map<String,Student> map = new HashMap<String,Student>();//使用泛型:可讀性強
map.put("01號",new Student("喬丹",23));//01號: 學生喬丹
map.put("02號",new Student("皮蓬",36));//02號: 學生皮蓬
//2.不帶泛型的map集合
Map map2 = new HashMap();//沒有泛型:可讀性差
map2.put(new Student("喬丹",23),"01號");//學生在前:編號在后
map2.put("02號",new Student("皮蓬",36));//學生在后:編號在前
}
}
class Student{
String username;
Integer age;
public Student(String username, Integer age) {
this.username = username;
this.age = age;
}
public Student() {
}
}
通過這段代碼,我們可以看到泛型能規(guī)范代碼的書寫,讓我們的代碼可讀性更強,便于后期我們對數(shù)據(jù)的處理。
如果我們使用不帶泛型的map集合保存數(shù)據(jù),那么map的數(shù)據(jù)保存很混亂,不便于后期對數(shù)據(jù)進行處理。
闖關練習
請描述下列哪些選項是泛型的優(yōu)點:
A: 泛型可以避免類型強轉
B: 泛型可以在編譯期間進行檢查
C: 泛型可以提高代碼的可讀性
D: 泛型可以提高代碼的靈活性
答案:ABCD
開班時間:2021-04-12(深圳)
開班盛況開班時間:2021-05-17(北京)
開班盛況開班時間:2021-03-22(杭州)
開班盛況開班時間:2021-04-26(北京)
開班盛況開班時間:2021-05-10(北京)
開班盛況開班時間:2021-02-22(北京)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2020-09-21(上海)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯(lián)科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號