23,在新代码里不用使用raw type。用了泛型之后,可以提供编译时类型检查,便于及早发现错误,从集合里读取数据的时候也不用手动的cast。如果真的想向集合里插入多种类型的数据,可以使用Object作为参数类型,比如List<Object>这样的。有点要注意的是class literal不能是泛型,只能有List.class,不能有List<String>.class这样的。由于泛型信息在编译时会被擦除,因此,instanceof操作符也不能和泛型进行比较,可以写if(set instanceof Set)或者if(set instanceof Set<?>),但是不能写if(set instanceof Set<String>) 。
24,去掉unchecked警告。如果实在消除不掉,而且又确定代码是类型安全的,可以使用@SuppressWarnings("unchecked"),这个做法其实也很常见, jdk的代码里都有,不过在使用这个注解的时候,一定要注意让它的作用域尽可能的小,能写在语句上就不要写在函数上。作者举了ArrayList.toArray这个方法来作为反面例子。不过我个人以为作者在这方面有点吹毛求疵了。
25,List优先于数组。数组是协变(covariant)的,而泛型是不能协变的,这就是说,如果Sub是Super的子类型,那么Sub[]也是Super[]的子类型,而List<Sub>不是List<Super>的子类型。还有个区别是数组是具体化的(reified),在运行时,数组都知道自己的元素是什么类型,而泛型的信息在编译后就被擦除了,运行时得不到了,这样才能和以前的没有使用泛型的旧代码兼容。基于以上这两大区别,所以不能创建泛型数组,不能使用new List<E>[], new List<String>[],new E[]这样的语句。但是泛型数组还是可以存在的,比如E[] a = (E[])list.toArray(); 最终结论是不要混用数组和泛型,如果真的这么混用了而产生编译错误或警告,那还是改用List吧。
26,在自己的代码里使用泛型。
27,使用泛型方法。不得不说,把方法变成泛型之后,方法签名长了很多啊,不知道是不是没有类型推导的原因,还要在方法修饰符和返回值之间在声明一次泛型参数列表,原本的public static Set union(Set s1, Set s2)现在变成了public static <E> Set<E> union(Set<E> s1, Set<E> s2),看起来极其啰嗦。到了JDK1.7,终于支持构造函数的类型推导了,再也不用写冗长的Map<String, String> = new HashMap<String, String>()了,可以写成Map<String, String> = new HashMap<>()了。
28,使用有界通配符来增强API的灵活性。也就是? extends E或者? super E这样的。还有就是不要在返回类型里使用通配符。
29,使用类型安全的混杂容器。说实话,我觉得纵然书里吹的好,如果需要把不同的类型混杂在一个容器里,还是raw类型用起来方便。
看完这一章之后,我感觉如果当时不是扩展旧的容器类,而是新造一套泛型容器,比如叫GList, GMap这样的名字,抛弃兼容性的包袱,也许泛型可以被设计的更好用。现在这样,感觉虽然能用,但是不好用,写起来又啰嗦。所以虽然大家广泛的使用JDK提供的泛型类,但是自己在代码里写泛型的就不多了。
分享到:
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
读书笔记:Effective Java中文版第3版笔记
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
读书笔记:Effective Java中文版学习项目
读书笔记:Effective Java中文版第二版示例、笔记
读书笔记:Effective Java中文版 第2版
读书笔记:Java练习包括《Java编程思想》《算法》《Effective Java》等
读书笔记:Effective Java中文版第二版示例代码
读书笔记:Effective Java 中文版(2版和3版)
读书笔记:读Effective Java中文版第3版阅读源码测试案列
读书笔记:Effective Java 中文版(第2版)总结 (美)Joshua Bloch 著
读书笔记:Effective.Java中文版(第3版)
安卓艺术开发探索读书笔记,EffectiveJava读书笔记. 收集各大神博客以及安卓笔记,安卓面试笔记等方便手机端查看. 更新说明 v2.2.2 1.增加了一些最近在学习比较好的安卓大神的博客. 2.增加了来自GeniusVJR整理的安卓...
《BookReading:读书笔记》项目是一个专注于Java编程的个人学习资源库,旨在帮助开发者通过阅读和整理书籍来提升自己的技术能力。在这个项目中,你将找到一系列与Java相关的读书笔记,这些笔记涵盖了从基础概念到高级...
java软件笔试题 my notebook 我的笔记本,大部分是在大二大三的时候写的笔记,对于已经毕业的来说可能比较基础甚至naive。...7:读书笔记 thinking in java effective java Android开发艺术探索 Android插件化开发指南
loveincode's notes 学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 ...读书笔记 Effective Java , HTTP权威指南 , Java
作者HotBitmapGG,源码StudyProject,一款 Material Design 风格的 AndroidRank 干货学习客户端,需要...安卓艺术开发探索读书笔记,EffectiveJava 读书笔记. 收集各大神博客以及安卓笔记,安卓面试笔记等方便手机端查看.