《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”);
明显,利用列表可以在编译时发现错误。我们当然希望在编译时发现错误了。
《Effective Java》读书笔记四(泛型)的更多相关文章
- Effective Java 读书笔记之四 泛型
泛型的本质是参数化类型.只对编译器有效. 一.请不要在新代码中使用原生态类型 1.泛型类和接口统称为泛型,有一个对应的原生态类型. 2.原生类型的存在是为了移植兼容性. 3.无限制通配类型和原生态类型 ...
- Effective java读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...
- Effective Java读书笔记完结啦
Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...
- Effective Java 读书笔记(四):泛型
1 不要使用原始类型 (1)术语 术语 例子 参数化类型(Parameterized type) List<String> 实际类型参数(Actual type parameter) St ...
- [Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条
第十三条 使类和成员的可访问性最小化 总得来说,我们应该尽量将成员的访问范围限制到最小!有利于解耦,开发.测试和优化都能够更加独立. 对于成员(域,方法,嵌套类和嵌套接口),有四种可能的访问级别,访问 ...
- [Effective Java 读书笔记] 第二章 创建和销毁对象 第三 四条
第三条 用私有构造器或者枚举类型强化singleton属性 singleton指只能被实例化一次的类,即将构造器设置为私有,使用公有静态成员来实例化,且只实例化一次对象 第四条 通过私有构造器强化不可 ...
- Effective Java 读书笔记之九 并发
一.访问共享的可变数据时要同步 1.synchronized关键字既然保证访问的可见性也能保证原子性.而volatile修饰符只能保证变量的线程可见性. 2.增量操作符等不是原子性,多线程操作时可能导 ...
- Effective Java 读书笔记之七 通用程序设计
一.将局部变量的作用域最小化 1.在第一次使用变量的地方声明 2.几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外 3.使方法小而集中是一个好的策略 二.for-each ...
- Effective Java 读书笔记之一 创建和销毁对象
一.考虑用静态工厂方法代替构造器 这里的静态工厂方法是指类中使用public static 修饰的方法,和设计模式的工厂方法模式没有任何关系.相对于使用共有的构造器来创建对象,静态工厂方法有几大优势: ...
随机推荐
- 【Nodejs】“快算24”扑克牌游戏算法 1.02
快算24是一种挺好的锻炼孩子算数能力的扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过有限四则运算得到结果24,四张牌必须仅用一次.各地玩法还有点差别,有的只算1-10,其它抽出来:有的地方把整幅牌都 ...
- 安装Ubuntu 桌面版 12.04 LTS 过程之记录
[下载ISO文件刻录到光盘上] 1.首先从http://www.ubuntu.com/download/desktop/zh-CN找到合适的版本下载. 2.完毕后,将ISO文件放好.然后启动nero, ...
- (C语言)memcpy函数原型的实现
在网上看到一道题,实现一个memcpy函数,于是查了一下memcpy的函数原型,如下: void* memcpy(char *strDest, const char *strSrc, int Coun ...
- C#中判断为空
在判断ComBox是否有选择条目(Item)时,判断出错,原因在于SeletedItem.ToString()存在问题,根本就不能转为String,去掉即可. null 关键字是表示不引用任何对象的空 ...
- Oracle Data Guard 重要配置参数
Oracle Data Guard主要是通过为生产数据库提供一个或多个备用数据库(是产生数据库的一个副本),以保证在主库不可用或异常时数据不丢失并通过备用数据库继续提供服务.对于Oracle DG的配 ...
- iOS多线程与网络开发之多线程NSThread
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...
- pcapng文件的python解析实例以及抓包补遗
为了弥补pcap文件的缺陷,让抓包文件可以容纳更多的信息,pcapng格式应运而生.关于它的介绍详见<PCAP Next Generation Dump File Format> 当前的w ...
- MongoDB删除数据库
> db.dropDatabase()
- MySQL_Oracle_事物的隔离级别
数据库会话的设置: 1:脏读 情景:A事物读取B事物修改了但是未提交的数据 问题:若B回滚了事物,A就读到了错误数据. 2:不可重复读 情景:A事物查询数据,B修改了数据,A又查询数据 问题:A事物前 ...
- hadoop的namenode无法启动的解决的方法
安装hadoop集群时,启动集群,发现master节点的namenode没有启动成功.这一般都是没有格式格式化namenode的缘故.格式化一下就可以,格式化namenode的命令:在hadoop安装 ...