Effective Java 读书笔记之四 泛型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Effective Java 读书笔记之四 泛型相关的知识,希望对你有一定的参考价值。

  泛型的本质是参数化类型。只对编译器有效。

一、请不要在新代码中使用原生态类型

  1、泛型类和接口统称为泛型,有一个对应的原生态类型。

  2、原生类型的存在是为了移植兼容性。

  3、无限制通配类型和原生态类型的区别是:通配符类型是安全的,原生态类型不安全。你可以将任何元素放入到原生态类型的集合中,但不能将除了null之外的其他任何元素放到Collection<?>中。

  4、两条例外:

    a、在Class中只能使用原生态类型,因为泛型信息可以在运行时被擦除。

    b、在操作instanceof时,使用参数化类型非法。

  5、总结:Set<Object>是个参数化类型,可包含任何对象类型的一个集合;Set<?>则是一个通配符类型,只能包含某种未知对象的一个集合;Set是原生态类型。 

二、消除非受检警告

  1、尽可能地消除每一个非受检的警告。

  2、可以使用@SuppressWarnings消除安全的类型警告,因该在尽可能小的范围内使用。增加变量声明是一个不错的技巧。

  3、使用@SuppressWarnings注解时,都要添加一条注释,说明为什么这么做是类型安全的。

三、列表优先于数组

  数组与泛型相比的两个不同点:

    a、数组是协变的:Sub是Super的子类,Sub[] 就是 Super[] 的子类。

    b、数组是具体化的:在运行时才知道并检查它们的元素类型约束。

  基于以上两点得出:数组和泛型是不能很好地混合使用的。若混合使用时出现了错误或者警告,应该使用列表代替数组。

四、优先考虑泛型

  1、使用泛型比使用需要在客户端代码中进行转换的类型来得更加安全,也更加容易。

五、优先考虑泛型方法

  1、静态工具方法尤其适合于泛型化。

  2、显著特性:无需显著地指定类型参数的值,调用泛型构造器时必须指定。

六、利用有限制通配符来提升API的灵活性

  1、通过使用有限制的通配符类型,可以提升API的灵活性。

  2、可以参考生产和消费属性来对应地选择extends和super。producer-extends,comsumer-super(PECS)原则。

  3、类型参数和通配符之间具有双重性。

七、优先考虑类型安全的异构容器

  1、异构容器是通过使用类型令牌作为参数来实现的。

以上是关于Effective Java 读书笔记之四 泛型的主要内容,如果未能解决你的问题,请参考以下文章

Effective C++读书笔记

java effective 读书笔记

[读书笔记]Effective Java 第一章

Effective Java2读书笔记-类和接口

Effective Java2读书笔记-类和接口

Effective Java2读书笔记-创建和销毁对象