美文网首页Android开发Android技术知识Android开发
学会Java泛型系列(一):Java泛型

学会Java泛型系列(一):Java泛型

作者: 涅小黑 | 来源:发表于2020-03-22 02:03 被阅读0次

    泛型(Generics)是一种参数化类型机制,一个类或者方法要处理一个对象一般会使用多态,一是把这个对象定义为接口,就可以处理扩展这个接口的对象了,但这种方法有很大的局限性,被处理类要扩展这个接口,以前的类不能复用的个处理类;或者把接受的对象定义为Object,但这种方式要做类型检查也容易出现ClassCastException。

    Java1.5的时候引入泛型的机制,由于要兼容之前版本的代码,Java对于泛型只是在编译器上面动了手脚,所以有一些局限性,后面的章节会详细讲解这点。

    下面举一个例子对比泛型带来的好处
    未使用泛型:

    List list = new ArrayList();
    list.add(1);
    list.add("123");
    list.add(false);
            
    Object o1 = list.get(0);
    String o2 = (String) list.get(1); //会产生ClassCastException
    boolean o3 = (Boolean) list.get(2);
    

    可以看出如果要类型转换才能拿到除Object外的类型,如果你拿到其他人写的方法返回一个list,还有去弄清楚每个元素是什么类型,难以维护。当然我们平时用的时候也不会往一个list放不同类型的对象,但也免不了要查阅list里面约定的是放什么类型和类型转换后才能使用。
    使用泛型就可以免除这种烦恼:

    List<String> list = new ArrayList<String>();
    //List<String> list = new ArrayList<>();  //Java1.7后会自动类型推断
    list.add("123");
    //list.add(false); //编译器会报错,不允许传非String的类型
            
    String o2 =  list.get(0); //不需要转型,编译器会帮忙处理
    //boolean o3 = list.get(1);//类型不对应,编译不通过
    

    使用泛型之后,编译器会帮我们做类型约束和检验,可以使代码更优雅

    目录

    学会Java泛型系列(零):简介及目录
    学会Java泛型系列(一):Java泛型
    学会Java泛型系列(二):泛型定义与使用
    学会Java泛型系列(三):泛型原理-擦除
    学会Java泛型系列(四):擦除带来的问题以及解决办法
    学会Java泛型系列(五):限定符
    学会Java泛型系列(六):常用案例

    相关文章

      网友评论

        本文标题:学会Java泛型系列(一):Java泛型

        本文链接:https://www.haomeiwen.com/subject/hgopyhtx.html