Java核心技术卷一第八章读书笔记

21 篇文章 1 订阅


泛型这一块我看的比较快,没有深究,书上这一章就有点难了,不太好理解

8.1 为什么要使用泛型程序设计
  • 从Java1.0版发布以来,变化最大的就是泛型。使用泛型机制编写的程序代码要比那些杂乱的使用object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性
  • 泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。
  • 在Java中增加泛型类之前,泛型程序设计是用继承实现的。但是有两个问题:
    • 当获取一个值时必须进行强制类型转换
    • 这里没有错误检查,可以向数组列表中添加任何类的对象
  • 类型参数的魅力在于:使得程序具有更好的可读性和安全性
  • JDK开发人员已经做出了很大的努力,为所有的集合类提供类类型参数!!!
8.2 定义简单泛型类
  • 类型变量使用大写形式,且比较短,这是很常见的。在Java库中,使用变量E来表示集合的元素类型,K和V来表示关键字与值的类型。T表示“任意类型”
8.3 泛型方法
  • 实际上,还可以定义一个带有类型参数的简单方法:
    class ArrayAlg{
        public static<T> T getMiddle(T...a) {
            return a[a.lengtyh / 2];
        }
    }
    
    类型变量放在修饰符的后面,返回类型的前面。当调用一个泛型方法时,在方法名钱的尖括号中放入具体的类型:
    String middle = ArrayAlg.<String>getMiddle("John", "Holk");
    
8.4 类型变量的限定
  • 有时,类或方法需要对类型变量加以约束

    class ArrayAlg{
        public static<T> T min(T[] a) {
            if(a == null || a.length == 0) return null;
            T smallest = a[0];
            for(int i = 1; i < a.length;i++)
                if(smallest.compareTo(a[i]) > 0) smallest = a[i]
            return smallest;
        }
    }
    

    这里有·问题,解决问题的方法是实现Comparator接口

    public static <T extends Comparator> T min(T[] a)...
    
  • 一个类型变量或通配符可以有多个限定,例如:

    T extends Comparator & Serializable

    限定类型用&分割,逗号用来分割类型变量

  • 在Java的继承中,可以根据需要拥有多个接口超类型,但限定类只能有一个。如果用一个类做限定,必须把这个类写在限定列表的第一个

8.5 泛型代码和虚拟机
  • 原始类型用一个限定类型变量来替换,如果没有限定就替换成Object(类型擦除)
  • 关于Java泛型转换的事实:
    • 虚拟机中没有泛型,只有普通的类或方法
    • 所有类型参数都用它们的限定类型替换
    • 桥方法被合成来保持多态
    • 为保持类型安全性,必要时加入强制类型转换
8.6 约束和局限性
  • 不能用基本类型实例化类型参数
  • 运行时类型查询只适用于原始类型
  • 不能创建参数化类型的数组
  • Varargs警告
  • 不能实例化类型变量
  • 不能构造泛型数组
  • 泛型类的静态上下文中类型变量无效
  • 不能抛出或捕获泛型类的实例
  • 可以消除对受查异常的检查
  • 注意擦除后的冲突
8.7 继承规则、8.8通配符类型,优先级不高没看
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值