diff --git a/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md b/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md index 9ccdd9b..7a05dd3 100644 --- a/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md +++ b/docs/notes/01. 考虑使用静态工厂方法替代构造方法.md @@ -52,14 +52,14 @@ public static Boolean valueOf(boolean b) {   **静态工厂方法的第二个缺点是,程序员很难找到它们。** 它们不像构造方法那样在 API 文档中突出,因此很难找出如何实例化一个提供静态工厂方法而不是构造方法的类。Javadoc 工具可能有一天会引起对静态工厂方法的注意。与此同时,可以通过将注意力吸引到类或接口文档中的静态工厂以及遵守通用的命名约定来减少这个问题。下面是一些静态工厂方法的常用名称。以下清单并非完整: - - from——A 类型转换方法,它接受单个参数并返回此类型的相应实例,例如:**Date d = Date.from(instant)**; - - of——一个聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起,例如:**Set\ faceCards = EnumSet.of(JACK, QUEEN, KING)**; - - valueOf——from 和 to 更为详细的替代 方式,例如:**BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE)**; - - instance 或 getinstance——返回一个由其参数 (如果有的话) 描述的实例,但不能说它具有相同的值,例如:**StackWalker luke = StackWalker.getInstance(options)**; - - create 或 newInstance——与 instance 或 getInstance 类似,除了该方法保证每个调用返回一个新的实例,例如:**Object newArray = Array.newInstance(classObject, arrayLen)**; - - getType——与 getInstance 类似,但是如果在工厂方法中不同的类中使用。**Type** 是工厂方法返回的对象类型,例如:**FileStore fs = Files.getFileStore(path)**; - - newType——与 newInstance 类似,但是如果在工厂方法中不同的类中使用。Type 是工厂方法返回的对象类型,例如:**BufferedReader br = Files.newBufferedReader(path)**; - - type—— getType 和 newType 简洁的替代方式,例如:**List\ litany = Collections.list(legacyLitany)**; + - from —— A 类型转换方法,它接受单个参数并返回此类型的相应实例,例如:**Date d = Date.from(instant)**; + - of —— 一个聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起,例如:**Set\ faceCards = EnumSet.of(JACK, QUEEN, KING)**; + - valueOf —— from 和 to 更为详细的替代 方式,例如:**BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE)**; + - instance 或 getinstance —— 返回一个由其参数 (如果有的话) 描述的实例,但不能说它具有相同的值,例如:**StackWalker luke = StackWalker.getInstance(options)**; + - create 或 newInstance —— 与 instance 或 getInstance 类似,除了该方法保证每个调用返回一个新的实例,例如:**Object newArray = Array.newInstance(classObject, arrayLen)**; + - getType —— 与 getInstance 类似,但是如果在工厂方法中不同的类中使用。**Type** 是工厂方法返回的对象类型,例如:**FileStore fs = Files.getFileStore(path)**; + - newType —— 与 newInstance 类似,但是如果在工厂方法中不同的类中使用。Type 是工厂方法返回的对象类型,例如:**BufferedReader br = Files.newBufferedReader(path)**; + - type —— getType 和 newType 简洁的替代方式,例如:**List\ litany = Collections.list(legacyLitany)**;   总之,静态工厂方法和公共构造方法都有它们的用途,并且了解它们的相对优点是值得的。通常,静态工厂更可取,因此避免在没有考虑静态工厂的情况下提供公共构造方法。