[英]What's the preferred Java convention for naming static constructor methods
命名靜態構造函數方法的首選約定是什么? 例如,假設我有一個Error
類,該類具有一個簡單的構造器,該構造器僅初始化字段,然后提供一些靜態構造器方法:
class Error {
static Error xxxx(String msg) {
return new Error(msg, -1);
}
static Error xxxx(String msg, int line) {
return new Error(msg, line);
}
final String msg;
final int line;
private Error(String msg, int line) {
this.msg = msg;
this.line = line
}
}
我應該如何命名xxxx
方法。 可能性包括:
valueOf
一些Java類遵循此規則,例如Integer.valueOf
,但這僅用於裝箱原語嗎? of
-更簡潔。 Error.of(msg, i)
似乎可讀。 error
-一些優點和缺點-參見下文。 create
-過度強調機制(創建內容),而不是意圖(給我一個值)。 例如,某些實現可能會緩存和重用值,這意味着並非總是這樣創建的。 createError
,與create
相同。 我傾向於以一種功能風格進行編碼,因此,我的偏好可能是#3,部分原因是如果我靜態導入Error
那么我可以簡單地將其稱為error(msg, i)
,它看起來可讀並模仿實際的構造方法用法。 但是,它可能導致與同名的局部變量混淆。 例如error = error(msg, i);
看起來很混亂。
我希望看到支持特定方法的證據或論據,而不是簡單的“我喜歡xxx”答案。
如果最近添加了JDK是一個很好的指示,那么您可以看一下java.time :
就方法的數量而言,API具有相對較大的表面積。 通過使用一致的方法前綴,可以使此操作易於管理。
of
-靜態工廠方法parse
-靜態工廠方法側重於解析- [...]
of
看起來像你的使用情況合理的候選人,但大概什么更重要的不是選擇的是一致性。
在“有效的Java”中,除了您已經提到的“ valueOf”和“ of”之外,Joshua Bloch還提出了以下建議:
getInstance
newInstance
獲取類型(即getError)
新類型(即newError)
一個很好的名字是newError(...)
。 這表明該班級本身也是一個工廠。
當工廠方法使用某種類型的緩存時of
可以使用valueOf
和of
從而不必調用方法來創建新實例。
newClassName
或createClassName
用於常規工廠方法,在該工廠方法總是嘗試創建實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.