• 泛型


           在学习Java中,最常见的就是泛型,几乎所有容器类都会使用泛型,自己封装的方法也会使用泛型;最大的感受就是通过泛型的使用,大大的扩展了代码的可扩展性。降低了代码的耦合度,所以泛型是Java基础的一个重要特性,抽时间还是要好好复习以下;

    1.基本概念   

    声明具有一个或多个参数类型的类或接口;编译器约束,运行期自动擦除;

    泛型的优势:参数化类型,类型安全性和表述性; 

    2.泛型与数组对比

           泛型用的最多的情况是在容器类中,例如我们所熟悉的List,ArrayList,LinkedList,HashMap,HashSet,LinkedHashMap.ConcurrentHashMap等容器类中。那么这些容器类对象数组之间存在什么区别呢?

       最主要的不同有两点:1.泛型是不可变的;数组是协变的。2.泛型运行期的擦除,数组运行期具体化

       协变可以理解为面向对象的多态,父类型可以指向子类型。编译过程中并不会校验;泛型的不可变在于,指定的是A类型,A的子类型也不能通过编译;

    Object[] l = new Long[10];
    l[0]="1111";//编译不报错
    List<Object> list = new ArrayList<Long>();//编译报错

    3.泛型方法

       1.有限制性通配符

       两种类型PECS(producter-extends,consumer-super),<? extends E>和<? super E>两种类型;

            只根据这个名词理解真的是有点难,其实直白点<? extends E>表示接收的参数继承了E,也即是只能是E或E的子类;<? super E>表示E所继承的超类

         

       2.泛型补偿

     

     

     

     

    参考图书:《effective java》

  • 相关阅读:
    CodeForces 1294B Collecting Packages(排序+贪心)
    计算系数(组合数)
    垒骰子(矩阵快速幂)
    蒜头君倒水(矩阵快速幂)
    Buy Tickets POJ
    Billboard HDU
    树状数组求逆序对 附HDU1394
    codeforces 1304D Shortest and Longest LIS
    codeforces 1301C Ayoub's function
    Codeforces 1301B Motarack's Birthday(二分)
  • 原文地址:https://www.cnblogs.com/perferect/p/12617958.html
Copyright © 2020-2023  润新知