Java记录 -73- 泛型详解

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));
        }
    }


你可能感兴趣的:(泛型详解,Java记录)