JDK5.0中新特性介绍:
泛型(Generics);
增强的“for”循环(Enhanced For loop);
自动装箱/自动拆箱(Autoboxing/unboxing);
类型安全的枚举(Type safe enums);
静态导入(Static import);
可变参数(Var args);
泛型是JDK1.5中一个最重要的特性。通过引入泛型,我们将获得编译时类型的安全和运行时更小的抛出ClassCastException的可能。
如果使用泛型,只要代码在编译时没有出现警告,就不会遇到运行时ClassCastException。
在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型。
public static void main(String[] args){ List list = new ArrayList(); list.add("hello"); list.add(11); list.add(true); for(int i=0;i<list.size();i++){ System.out.println((String)list.get(i)); } }
上面的程序在编译的时候可以顺利通过,但在运行的时候则抛出以下异常:
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at my.arraylist.ArrayListTest3.main(ArrayListTest3.java:15)
如果异常能提前发现,就好了。编译时的错误修改要比运行时的错误修改简单多了。
泛型就给我们提供了这样一个机制,让上面的错误可以提前出现,即编译时期就暴露出来。
public static void main(String[] args){ List<String> list = new ArrayList<String>(); list.add("hello"); //在编译时以下两行会提示以下错误,无法编译通过 //The method add(int, String) in the type List<String> is not applicable for the arguments (int) list.add(11); list.add(true); for(int i=0;i<list.size();i++){ System.out.println((String)list.get(i)); } }