正如我们在Java 8中看到的那样,有许多名为'of'的方法(如Stream.of(),Optional.of())和许多库(如actorOfAkka)。
“ of”是什么意思?是英文单词“ of”还是“ Object Factory”之类的缩写?
正如我们在Java 8中看到的那样,有许多名为'of'的方法(如Stream.of(),Optional.of())和许多库(如actorOfAkka)。
“ of”是什么意思?是英文单词“ of”还是“ Object Factory”之类的缩写?
Stream.of(1,2,3)听起来很不错,但一个Optional.of(1)是只是奇怪。actorOf甚至更奇怪,应该被称为createActor。
Stream.of(a,b,c)读取:由a,b和c组成的流。
Answers:
传统上,如果您研究包装器类,它们都包含用于构建给定值类型的包装器类实例的valueOf(XXX)方法。
Integer.valueOf(int)
Double.valueOf(double)
Float.valueOf(float)
Java从第一天开始遵循此命名约定。类似地,大多数Java-8引入的类都of(...)大量包含此方法。
Stream.of(...)
LocalDate.of(year, month, dayOfMonth)
Instant.ofEpochSecond(epochSecond)
and many more.
不仅有valueOf或of可用的方法,它有服务于特定的目的或不同类中的任务类型几个方法,他们已经与表示该任务的最合适的名称分配。
Integer.parseInt(str), Double.parseDouble(), Date.parse(datestr)等Calendar.get(field), LocalDate.get(TemporalField)等String.format(), SimpleDateFormat.format(), DateTimeFormatter.format()etc这些命名约定在Java8 DateTime API中大量使用。签出此方法命名约定
这是用于静态工厂方法的通用命名约定。
Joshua Bloch在有效Java(第二版)第1项中提到了有关模式和相关命名约定的以下内容:考虑静态工厂方法而不是构造函数(添加了重点):
...(a)静态工厂方法的缺点是它们不易与其他静态方法区分开。它们在API文档中不像构造函数那样突出,因此很难弄清楚如何实例化提供静态工厂方法而不是构造函数的类。Javadoc工具有一天可能会引起人们对静态工厂方法的关注。同时,您可以通过在类或接口注释中吸引对静态工厂的注意,并遵循常见的命名约定来减少此缺点。以下是静态工厂方法的一些常用名称:
valueOf—返回一个松散地说,具有与其参数相同值的实例。这种静态工厂实际上是类型转换方法。
of—由EnumSet(Item 32)推广的valueOf的一种简洁替代方法。...
因此,正如其他人指出的那样,“ of”是英语单词“ of”的缩写,不是缩写。但是,使用此约定的原因之一是使查找类是否提供了工厂方法变得更加容易,因为静态工厂没有在JavaDocs的单独部分中显示(与构造方法相比)。
在我看来,使用简洁明了的静态工厂的另一个好处是,它使代码的读法像prose一样,如果它被new构造函数调用所困扰,则不是这种情况。