使用泛型的好处
使用泛型的好處
上一節只是講解了泛型的引入,那么泛型帶來了哪些好處呢?
-
將運行時期的ClassCastException,轉移到了編譯時期變成了編譯失敗。
-
避免了類型強轉的麻煩。
通過我們如下代碼體驗一下:
public class GenericDemo2 {public static void main(String[] args) {Collection<String> list = new ArrayList<String>();list.add("abc");list.add("itcast");// list.add(5);//當集合明確類型后,存放類型不一致就會編譯報錯// 集合已經明確具體存放的元素類型,那么在使用迭代器的時候,迭代器也同樣會知道具體遍歷元素類型Iterator<String> it = list.iterator();while(it.hasNext()){String str = it.next();//當使用Iterator<String>控制元素類型后,就不需要強轉了。獲取到的元素直接就是String類型System.out.println(str.length());}} }tips:泛型是數據類型的一部分,我們將類名與泛型合并一起看做數據類型。
package com.learn.demo03.Generic;import java.util.ArrayList; import java.util.Iterator;public class Demo01Generic {public static void main(String[] args) {show02();}/*創建集合對象,使用泛型好處:1.避免了類型轉換的麻煩,存儲的是什么類型,取出的就是什么類型2.把運行期異常(代碼運行之后會拋出的異常),提升到了編譯期(寫代碼的時候會報錯)弊端:泛型是什么類型,只能存儲什么類型的數據*/private static void show02() {ArrayList<String> list = new ArrayList<>();list.add("abc");//list.add(1);//add(java.lang.String)in ArrayList?cannot be applied to (int)//使用迭代器遍歷list集合Iterator<String> it = list.iterator();while(it.hasNext()){String s = it.next();System.out.println(s+"->"+s.length());}}/*創建集合對象,不使用泛型好處:集合不使用泛型,默認的類型就是Object類型,可以存儲任意類型的數據弊端:不安全,會引發異常*/private static void show01() {ArrayList list = new ArrayList();list.add("abc");list.add(1);//使用迭代器遍歷list集合//獲取迭代器Iterator it = list.iterator();//使用迭代器中的方法hasNext和next遍歷集合while(it.hasNext()){//取出元素也是Object類型Object obj = it.next();System.out.println(obj);//想要使用String類特有的方法,length獲取字符串的長度;不能使用 多態 Object obj = "abc";//需要向下轉型//會拋出ClassCastException類型轉換異常,不能把Integer類型轉換為String類型String s = (String)obj;System.out.println(s.length());}} }?
總結
- 上一篇: 泛型的概念
- 下一篇: 定义和使用含有泛型的类