该章23-29条主要讲述使用泛型对编程的安全性所带来的好处以及可以使API得到更广泛的应用。
23条:不要在新代码中使用原生态类型
使用原生态类型如list,你不能确定该对象里面的元素到底是什么type,会发生ClassCastException的错误,而且编译时发现不了,运行时才可以。而有了泛型,参数化可以使得编译器明确知道list中的类型,在表述和安全方面都有优势。
泛型有子类型化的规则,List<String>是原生态类型List的一个子类型,但是不是参数化类型List<Object>的子类型。
不能将任何元素(除了null之外)放入Collection<?> c,即c.add(a)是不对的,c.add(null)则成立
在不确定或者不在乎集合中元素类型的情况下,使用无限制的通配符,即Set<?>
Set<Object>是个参数化类型,可以包含任何对象类型
List<Object> strings = new ArrayList<Object>();
strings.add(1);
strings.add("d");
Set<?>是一个通配符,可以支持任何一个集合,表示只能包含某种未知对象类型的一个集合
List<Object> objects = new ArrayList<Object>();
objects.add(1);
objects.add("d");
List<?> s = objects;
List<String> stings = new ArrayList<String>();
s = stings;
Set则是个原生态类型,脱离了泛型系统,是不安全的,只在Java 1.5之前使用
两个例外:
1.在类型文字中必须使用原生态类型,不可以使用参数化类型,List.class, String[].class和int.class都合法,但是List<String>.class,List<?>.class不合法
2.instanceof
24条: 消除非受检警告
- 如果无法消除警告,同时可以证明引起警告的代码是类型安全的,(只有在这种情况下才)可以使用一个@SuppressWarnings("unchecked")注解来禁止这条警告
- 应该在尽可能小的范围中使用SuppressWarnings注解,不要再类上使用
- 没到使用@。。。的时候,都有加注释说明为什么这么做是安全的
25条:列表优先于数组
26条:优先考虑泛型
使用泛型比使用需要在客户端代码中进行转换的类型来的安全。
27条:优先考虑泛型方法
静态工厂方法尤其适合泛型化,泛型方法的好处类似于泛型,可以确保方法不经过转换使用。
28条:利用有限制通配符来提升API的灵活性
有限制的通配符
PECS原则,表示,producer-extends(List<? extends T>优先List<T>),consumer-super(List<? super T>优先List<T>)
不要用通配符作为返回类型
29条:优先考虑类型安全的异构容器
用类型作为Map的键
下一条 Effective Java 2 读书笔记 第6章 枚举和注解
分享到:
相关推荐
Java程序设计:第五章 泛型、枚举与for语句的简化写法.ppt
Java编程思想第十五章泛型(4).pptx
Java语言程序设计教程课件第五章泛型和枚举,教程选用清华大学雍俊海编写的Java程序设计教程第三版
java 带两个类型参数的泛型 java 带两个类型参数的泛型
Java Generics and Collections 英文版,详细描述java 泛型技术
完整版 Java高级教程 Java语言程序设计 第5章 Java反射(共9页).ppt 完整版 Java高级教程 Java语言程序设计 第6章 常用设计模式(共25页).ppt 完整版 Java高级教程 Java语言程序设计 第7章 Java注解(共10页).ppt...
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
详细的介绍了集合框架的用法,及其语法规则,剖析了使用的使用注意事项,帮助更牢靠的掌握集合框架的知识及泛型内容。谢谢
java 继承泛型类示例 java 继承泛型类示例 java 继承泛型类示例
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
我眼中的Java-Type体系(2) 秒懂Java类型(Type)系统 Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型...
Java SE完整版精品优质课件 自学入门必看的优秀Java基础...第5章 高级类特性2 第6章 异常处理 第7章 Java集合 第8章 泛型 第9章 注解&枚举 第10章 IO 第11章 多线程 第12章 Java常用类 第13章 Java反射 第14章 网络编程
JAVA泛型教程(帮你解决学习泛型的苦恼). Java 泛型编程可能会碰到很多问题,本教程可能会对你有帮助哦。
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
关于java基础的泛型的练习
java 一个关于泛型的简单例子 java 一个关于泛型的简单例子 java 一个关于泛型的简单例子
详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。
java,学习java泛型,java培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptxjava培训之泛型.pptx
了解泛型,能够说出泛型的作用和优点 掌握泛型类,能够独立定义和使用...为了解决这些问题,从JDK 5版本开始引入了泛型,本章将围绕泛型的相关内容进行讲解。 01泛型基础 02泛型类 03泛型接口 04泛型方法 05类型通配符
收集的java李兴华老师的课件笔记。感觉还不错,适合回顾和新手补习。