Java泛型全解

来源:互联网 发布:南京php招聘 编辑:程序博客网 时间:2024/06/15 10:39
说到泛型,我们不得不先说说Java集合的缺点:
  • 当我们把一个对象加入集合后,集合就会忘记这个对象的数据类型,当再次取出对象时,该对象的编译类型就变成了Object类型(但是运行时的类型没有改变)。
  • 编译时不检查类型的异常(看下面的代码)
    如果希望创建一个List对象,且该对象只能保存字符串类型,那我们可以扩展ArrayList,下面这个List集合里只能存放String对象。
    看下面的代码
    package com.leilei;import java.util.ArrayList;import java.util.List;public class ListError {      /**      * @param args      */      public static void main(String[] args) {           //给你一个list里同时添加字符串和int数据           List strList = new ArrayList();           strList.add( "hello1");           strList.add( "hello2");           strList.add( "hello3");           strList.add(4);          System. out .println(strList);                     //遍历数组           for (Object obj:strList){              String strList1 = (String) obj;              System. out .println(strList1);          }     }}

    ----------------------运行结果---------------------
    [hello1, hello2, hello3, 4]
    hello1
    hello2
    hello3
    Exception in thread "main" java.lang.ClassCastException : java.lang.Integer
         at com.leilei.ListError.main( ListError.java:22 )
    可以看见strList.add(4)视图向List集合里添加一个int类型,在编译的时候并不报错,因为下面的system能成功的打印数组的信息[hello1, hello2, hello3, 4],但是在遍历数组取出List的数据时, String strList1 = (String) obj;试图将int类型转换成String类型。这个时候程序就会抛java.lang.ClassCastException 异常。

    在引入泛型以后(看下面的代码)
    package com.leilei;import java.util.ArrayList;import java.util.List;public class ListError {           /**      * @param args      */      public static void main(String[] args) {           List<String> strList = new ArrayList<String>();           //给你一个list里同时添加字符串和int数据           strList.add( "hello1");           strList.add( "hello2");           strList.add( "hello3");           strList.add(4);          System. out .println(strList);                     //遍历数组           for (int i=0; i < strList.size(); i++){              System. out .println(strList.get(i));          }          }    }
    在程序的17行出现了编译错误,因为在List<String>定义的时候约束了list只能接收String类型的数据。这下可以看见泛型的好处了吧。

    希望以上资料对大家有帮助,欢迎关注我的新浪微博:http://weibo.com/419768151