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”);

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

  • 相关阅读:
    软件工程第三次作业
    软件工程第一次作业
    软件工程第0次作业
    第2次作业
    第1次作业
    第0次作业
    软件工程第四次作业 石墨文档IOS
    软件工程第三次作业
    软件工程第一次作业
    第零次作业
  • 原文地址:https://www.cnblogs.com/nayitian/p/3245496.html
Copyright © 2011-2022 走看看