mirror of
https://github.com/sjsdfg/effective-java-3rd-chinese.git
synced 2025-01-16 07:11:02 +08:00
Update 01. 考虑使用静态工厂方法替代构造方法.md
This commit is contained in:
parent
b5df370624
commit
175dde7754
@ -50,7 +50,7 @@ public static Boolean valueOf(boolean b) {
|
||||
|
||||
**只提供静态工厂方法的主要限制是,没有公共或受保护构造方法的类不能被子类化。** 例如,要想将 `Collections` 框架中任何遍历的实现类进行子类化,是不可能的。但是这样也会因祸得福,因为它鼓励程序员使用组合(composition)而不是继承(详见第 18 条),并且是不可变类型锁需要的(详见第 17 条)。
|
||||
|
||||
**静态工厂方法的第二个缺点是,程序员很难找到它们。** 它们不像构造方法那样在 API 文档中突出,因此很难找出如何实例化一个提供静态工厂方法而不是构造方法的类。Javadoc 工具可能有一天会引起对静态工厂方法的注意。与此同时,可以通过将注意力吸引到类或接口文档中的静态工厂以及遵守通用的命名约定来减少这个问题。下面是一些静态工厂方法的常用名称。以下清单这是列出了其中的一小部分:
|
||||
**静态工厂方法的第二个缺点是,程序员很难找到它们。** 它们不像构造方法那样在 API 文档中明确的标注出来。因此,对于提供了静态方法而不是构造器的类来说,想要查明如何实例化一个类是十分困难的。Javadoc 工具可能有一天会注意到静态工厂方法。与此同时,通过关注类或者接口的文档中静态方法,并且遵守标准的命名习惯,也可以弥补这一劣势。下面是一些静态工厂方法的常用名称。以下清单这是列出了其中的一小部分:
|
||||
|
||||
- from —— A 类型转换方法,它接受单个参数并返回此类型的相应实例,例如:**Date d = Date.from(instant)**;
|
||||
- of —— 一个聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起,例如:**Set\<Rank\> faceCards = EnumSet.of(JACK, QUEEN, KING)**;
|
||||
|
Loading…
Reference in New Issue
Block a user