effective_java第23條:請不要新程式碼中使用原生態型別
阿新 • • 發佈:2018-12-19
從這條開始涉及泛型相關的點。
從JDK5開始Java新增了“泛型”新特性,例如:List<String>,在這之前則只有List不會限定型別。
如今的JDK版本中還是可以寫原生型別,但這會帶來隱藏的不安全問題。如果在宣告一個列表變數時不使用泛型而使用原生型別,如下:
public class Main { public static void main(String[] args) throws Exception{ List list = new ArrayList(); list.add("hello"); list.add(2); } }
可以看到可以插入任意型別的資料。如果使用泛型:
public class Main { public static void main(String[] args) throws Exception{ List<String> list = new ArrayList<String>(); list.add("hello"); //list.add(2); //編譯期就會出錯 } }
簡而言之,使用泛型相對“安全”,從一開始就能限定資料型別,防止之後不小心插入了錯誤的型別,而對於原生態型別則不會檢查插入的型別,有可能在以後插入了其他型別而只有在執行時才丟擲異常,所以鼓勵使用泛型。
另外書中提到了“?”萬用字元和“<Object>”之間的區別,可參考《Java中的Object,T(泛型),?區別》。