Effective Java笔记

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Effective Java笔记脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

第二章 创建和销毁对象

第1条 考虑用静态工厂方法代替构造器

两者创建对象的形式,例如:
构造器是new Boolean();
静态工厂方法是

public static Boolean valueOf(boolean b) {     return (b ? TRUE : FALSE); } 

在Boolean类中, 常量TRUE和 FALSE又如下:

public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE = new Boolean(false); 

静态工厂方法的4个优势:
1.有名称,即方法名。构造器的参数没有确切地描述其返回的对象,适当名称的静态工厂方法更容易使用,也易于阅读。例如:
BigInteger(int, int, Random)返回的值可能为素数;用名为 Biginteger.PRobablePrime(int, Random)来表示,更清楚。

2.不必在每次调用它们的时候都创建一个新对象。例如: Boolean.valueOf(boolean)。
这个方法中的 TRUE和 FALSE是预先构建好的实例,并被缓存,可以重复利用
如果程序经常创建相同的对象,并且代价很高,则这项技可以提升性能。

3.可以返回原返回类型的任何子类型的对象。这样提供了的灵活性。例如:
API可以返回对象,同时又不会使对象的类变成公有的。这样,API会变得简洁。
java.util.EnumSet类中的noneof方法。代码片段

if (universe.length <= 64)     return new RegularEnumSet<>(elementType, universe); else     return new JumboEnumSet<>(elementType, universe); 

其中 RegularEnumSet和 JumboEnumSet都是 EnumSet的子类。

4.在创建参数化类型实例的时候,使代码变得简洁。例如:

Map<String, List<String>> map = new HashMap<String, List<String>>(); 

如果 HashMap提供这样的的方法:

pubic static <K, V> HashMap<K, V> newInstance() {     return new HashMap<K, V>(); } 

那么,上面的代码就可以这样:

Map<String, List<String>> map =  HashMap.newInstance(); 

静态工厂方法的2个缺点:
1.类如果不含公有的或者受保护的构造器,就不能被子类化。
2.与其他的静态方法实际上没有任何区别。在API文档中,没有像构造器那样明确标识出来,因此,
对于提供了静态工厂方法而不是构造器的类来说,要查明如何实例化一个类,有点困难

脚本宝典总结

以上是脚本宝典为你收集整理的Effective Java笔记全部内容,希望文章能够帮你解决Effective Java笔记所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。