zoukankan      html  css  js  c++  java
  • 《Effective Java》读书笔记四(泛型)

    Java1.5发行版本中增加了泛型(Generic)。在没有泛型之前,从集合中读取到的每一个对象都必须进行转换。如果有人不小心插入了错误的类型对象,在运行时的转换处理就会出错。有了泛型之后,可以告诉编译器每个集合中接受哪些对象类型,编译器自动地为你的插入进行转化,并在编译时告知是否插入了类型错误的对象。这样可以使程序更加安全,也更加清楚。

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

    术语

    示例

    所在条目

    参数化的类型

    List<String>

     

    实际类型参数

    String

     

    泛型

    List<E>

     

    形式类型参数

    E

     

    无限制通配符类型

    List<?>

     

    原生态类型

    List

     

    有限制类型参数

    <E extends Number>

     

    递归类型限制

    <T extends Comparable<T>>

     

    有限制通配符类型

    List<? extends Number>

     

    泛型方法

    static <E> List<E> asList(E[] a)

     

    类型令牌

    String.class

     

    原生态类型允许存在的原因是兼容性考虑。

    快速回顾:

    • Set<Object>是个参数化类型,表示可以包含任何对象的一个集合;
    • Set<?>则是一个通配符类型,表示只能包含某种未知对象类型的一个集合;
    • Set则是个原生态类型,它脱离了泛型系统。前两种是安全的,最后一种不安全。

    No25 列表优先于数组

    下面的代码片段是合法的,却是不符合预期:

    // Fail at runtime!
    Object[] objectArray = new Long[1];
    objectArray[0] = “I don’t fit in”; // Throws ArrayStoreException

    但下面这段代码则不合法,但却提醒了你怎样才能达到预期:

    // Won’t compile!
    List<Object> o1 = new ArrayList<Long>(); // Incompatible types
    o1.add(“I don’t fit in”);

    明显,利用列表可以在编译时发现错误。我们当然希望在编译时发现错误了。

  • 相关阅读:
    vue-cli脚手架工具构建&初始化vue项目
    2020/05/17 Github加速-DNS配置
    同时将本地git仓库提交到gitee和github
    git远程仓库在本地看不到&push 到远程仓库失败的解决方案
    stylus的使用-变量和函数
    webpack使用4-HRM热替换&SourceMap&解析es语法
    webpack使用3-plugin插件的使用
    webpack使用2-常用的几个loader的使用
    webpack基本使用
    spring框架里面的注入?
  • 原文地址:https://www.cnblogs.com/nayitian/p/3245496.html
Copyright © 2011-2022 走看看