正如我们可以在Java 8看到,有许多方法"的",像命名Stream.of()
,Optional.of()
等等,许多图书馆actorOf
在阿卡.
这个"的"是什么意思?它是英文单词"of"还是像"Object Factory"这样的缩写?
san*_*nit 36
传统上,如果您查看包装类,它们都包含构建给定值类型的包装类实例的valueOf(XXX)
方法.
Integer.valueOf(int)
Double.valueOf(double)
Float.valueOf(float)
Run Code Online (Sandbox Code Playgroud)
Java从第1天开始遵循此命名约定.类似地,大多数Java-8引入的类都包含此of(...)
方法.
Stream.of(...)
LocalDate.of(year, month, dayOfMonth)
Instant.ofEpochSecond(epochSecond)
and many more.
Run Code Online (Sandbox Code Playgroud)
不仅有valueOf
或者有of
可用的方法,它还有更多的方法可以在不同的类中为特定目的或任务类型提供服务,并且它们已经分配了代表该任务的最合适的名称.
Integer.parseInt(str), Double.parseDouble(), Date.parse(datestr)
等Calendar.get(field), LocalDate.get(TemporalField)
等String.format(), SimpleDateFormat.format(), DateTimeFormatter.format()
等Java8 DateTime API大量使用这些命名约定.查看此方法命名约定
Mic*_*nic 27
它是用于静态工厂方法的常见命名约定.
Joshua Bloch在Effective Java(第2版)中提到了以下关于模式和相关命名约定的内容,第1项:考虑静态工厂方法而不是构造函数(强调添加):
......(a)静态工厂方法的缺点是它们不易与其他静态方法区分开来.它们不像构造函数那样在API文档中脱颖而出,因此很难弄清楚如何实例化提供静态工厂方法而不是构造函数的类.Javadoc工具有一天可能会引起对静态工厂方法的注意.与此同时,您可以通过引起对类或接口注释中的静态工厂的关注,并遵守常见的命名约定来减少这种缺点.以下是静态工厂方法的一些常用名称:
valueOf
- 从松散的角度来看,返回一个与其参数值相同的实例.这种静态工厂是有效的类型转换方法.
of
- 一个简洁的替代valueOf,由EnumSet推广(第32项)....
因此,正如其他人所指出的那样,"of"表示英文单词"of",而不是缩写.但是使用此约定的原因之一是更容易找出类是否提供工厂方法,因为静态工厂不显示在JavaDocs的单独部分中(与构造函数相比).
在我看来,使用简洁和描述性命名的静态工厂的另一个好处是,它使代码读起来像散文,如果它充满了new
构造函数调用,则不是这种情况.