摘要:构造器的参数没有确切地描述其返回的对象,适当名称的静态工厂方法更容易使用,也易于阅读。在文档中,没有像构造器那样明确标识出来,因此,对于提供了静态工厂方法而不是构造器的类来说,要查明如何实例化一个类,有点困难。
第二章 创建和销毁对象
第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> map = new HashMap >();
如果 HashMap提供这样的的方法:
pubic staticHashMap newInstance() { return new HashMap (); }
那么,上面的代码就可以这样:
Map> map = HashMap.newInstance();
静态工厂方法的2个缺点:
1.类如果不含公有的或者受保护的构造器,就不能被子类化。
2.与其他的静态方法实际上没有任何区别。在API文档中,没有像构造器那样明确标识出来,因此,
对于提供了静态工厂方法而不是构造器的类来说,要查明如何实例化一个类,有点困难。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66522.html
摘要:如果采用抽象类,则属性组合可能导致子类的组合爆炸。内部类的设计静态成员类用修饰的内部类,可以不依赖于外部实例进行创建。如下所示其构造函数默认是,并且无法修改。 对所有对象都通用的方法 equals和hashCode方法的关系 重写equals方法必须也要重写hashCode方法。 equals用的属性没变,则多次调用hashCode返回值也必须保持不变。 equals比较相等的对象,...
摘要:这本书是我第一次买的,从买来至今整本书还没有看完,只看了一半,原因是个人比较懒,而且玩的心比较大,经过这么多年的沉淀,终于可以偷点时间写下对于这本书的观后感了整本书给我的感觉不像是一个技术书,更多的是讲解一些实用技巧,而对于我这个职场菜鸟来 effective Java 这本书是我第一次买的, 从买来至今整本书还没有看完, 只看了一半, 原因是个人比较懒,而且玩的心比较大,经过这么多年...
摘要:第二章创建和销毁对象何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作。表示工厂方法所返回的对象类型。 第二章 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保他们能够适时地销毁,以及如何管理对象销毁之前必须进行的各种清理动作。 1 考虑用静态工厂方法代替构造器 一般在某处获取一个类的实例最...
阅读 1448·2021-09-24 10:38
阅读 1437·2021-09-22 15:15
阅读 3027·2021-09-09 09:33
阅读 869·2019-08-30 11:08
阅读 610·2019-08-30 10:52
阅读 1224·2019-08-30 10:52
阅读 2285·2019-08-28 18:01
阅读 488·2019-08-28 17:55