疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java基础泛型详解


 

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