Effective Java(四) 泛型

泛型

Tip-23 请不要在新代码中使用原生态类型

  • java1.5 版本后 就不要使用 List 而是 使用 List<String> 这种 带泛型的集合

  • 如果使用原来的集合类型,就失掉了泛型在安全性和表述型方面的所有优势

  • 原生的List 和 List<Object> 是不同的 List<Object> 并没有丢掉安全性

  • 假如不确定或不关心实际的类型参数,就可以使用一个问号代理 此乃 无限制通配符类型List<?>

  • 加入比对两个集合中的共同元素的数量-使用无限制通配符


static int numElementsInCommon(Set<?> s1,Set<?> s2){
    
    int result = 0 ;
    
    for(Object 01 : s1){
        if(s2.contains(o1)){
            result++;
        }
    }
    
    return result;
    
}
  • 不要在新代码中使用原生态类型,这条规则有两个小小的例外,两者都源于“泛型信息可以在运行时被擦除”这一事实。
  • 在类文字中必须使用原生态类型。换句话说 List.class String[].class 和 int.class 都合法,但是List<String>.class 和 List<?>.class 则不合法
  • 由于泛型信息可以在运行时删除,因此在参数化类型而非无限制通配符上使用instanceof操作符是非法的。
  • 用无限制通配符类型代替原生态类型,对instanceof 操作符的行为不会产生影响。

Tip-24 消除非受检警告

  • 用泛型编程时,会遇到许多编译警告:非受检强制转化警告,非受检方法调用警告,非受检普通数组创建警告,以及非受检转换警告
  • 要尽可能消除一切非受检警告,如果消除了所有警告,就可以确保代码是类型安全的

Tip-25 列表优先于数组

  • 数组于泛型相比,有两个重要的不同点。首先,数组是协变的,泛型是不可变的
  • 第二大区别,数组是具体化的。
  • 数组提供了运行时的类型安全,但是没有编译时的类型安全,
  • 如果你发现自己将他们混合起来使用,并且得到了编译时错误或者警告,你的第一反应是用列表代替数组

Tip-26 优先考虑泛型

  • 看不懂啊

Tip-27 优先考虑泛型方法

  • 静态工具方法尤其适合于泛型化
  • 泛型化带来类型安全
  • 泛型方法就像泛型一样,使用起来比要求客户端转换输入参数并返回值得方法来得更加安全,也更加容易。

Tip-28 利用有限制通配符来提升API的灵活性

  • java提供了一种特殊的参数化类型,称作有限制的通配符类型<? Extends E>
  • <? Extends E> 和 <? super E> 逆变和协变
  • PECS 表示 Producer-extends Consumer-super
  • 方法的参数是协变位置,返回值是逆变位置。
  • 要从泛型类取数据时,用extends;
  • 要往泛型类写数据时,用super;
  • 既要取又要写,就不用通配符(即extends与super都不用)。

Tip-29 优先考虑类型安全的异构容器

  • 看不懂

不在更新Effective 系列 很多东西都是一种感觉 并且多数知识是积累性质的,并没有在实际开发中使用,在写的新的一章时发现很多知识不应用就会遗忘,而且简单的笔记也没有实质性的帮助,所以永久性停更此系列,以后的文章应该聚焦细节,和实际生产环境的问题。书继续读,文章到此处,说不定二读,三读,会继续写下去。。。。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容