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

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

  • 相关阅读:
    安卓逆向前置之JAVA学习
    @Controller VS @RestController @RequestBody VS @ResponseBody
    【ArangoDb踩坑】ArangoDb中的大数比较
    我的快排
    记录改造ffmpeg遇到的依赖库问题
    centos7 配置阿里yum源
    记录一个解决GLIBC_2.18 not found的问题
    js 格式化时间 供页面使用
    5G PDU session Establishment
    DPDK performance for USER application
  • 原文地址:https://www.cnblogs.com/nayitian/p/3245496.html
Copyright © 2020-2023  润新知