[英]What does the naming convention 'of' mean in Java?
正如我們在Java 8中看到的,有許多名為'of'的方法,如Stream.of()
, Optional.of()
,以及許多庫,如Akka中的actorOf
。
這個“的”是什么意思? 它是英文單詞“of”還是像“Object Factory”這樣的縮寫?
這是一個英文單詞,是的。 通常選擇它使表達式讀起來像英語短語。 例如, Stream.of(3, 4)
應該看起來像“三和四流”,這有點像“由三號和四號組成的流”的縮短版本。
傳統上,如果你查看包裝類,它們都包含valueOf(XXX)
方法來構建給定值類型的包裝類的實例 。
Integer.valueOf(int)
Double.valueOf(double)
Float.valueOf(float)
Java從第1天開始遵循這個命名約定。類似地,大多數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()
等 Java8 DateTime API大量使用這些命名約定。 查看此方法命名約定
它是用於靜態工廠方法的常見命名約定。
Joshua Bloch在Effective Java(第2版)中提到了以下關於模式和相關命名約定的內容,第1項:考慮靜態工廠方法而不是構造函數(強調添加):
......(a)靜態工廠方法的缺點是它們不易與其他靜態方法區分開來。 它們不像構造函數那樣在API文檔中脫穎而出,因此很難弄清楚如何實例化提供靜態工廠方法而不是構造函數的類。 Javadoc工具有一天可能會引起對靜態工廠方法的注意。 與此同時,您可以通過引起對類或接口注釋中的靜態工廠的關注,並遵守常見的命名約定來減少這種缺點 。 以下是靜態工廠方法的一些常用名稱:
valueOf
-Returns一個實例,松散地說,它的參數值相同。 這種靜態工廠是有效的類型轉換方法。
of
-A簡明替代的valueOf,由EnumSet(項目32)普及。...
因此,正如其他人所指出的那樣,“of”表示英文單詞“of”,而不是縮寫。 但是使用此約定的原因之一是更容易找出類是否提供工廠方法,因為靜態工廠不顯示在JavaDocs的單獨部分中(與構造函數相比)。
在我看來,使用簡潔和描述性命名的靜態工廠的另一個好處是它使代碼讀起來像散文 ,如果它充滿了new
構造函數調用則不是這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.