美文网首页Java 杂谈
Effective Java(四) 泛型

Effective Java(四) 泛型

作者: 凌云_00 | 来源:发表于2018-02-07 14:15 被阅读0次

    泛型

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

    相关文章

      网友评论

        本文标题:Effective Java(四) 泛型

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