簡體   English   中英

命名靜態構造方法的首選Java約定是什么

[英]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方法。 可能性包括:

  1. valueOf一些Java類遵循此規則,例如Integer.valueOf ,但這僅用於裝箱原語嗎?
  2. of -更簡潔。 Error.of(msg, i)似乎可讀。
  3. error -一些優點和缺點-參見下文。
  4. create -過度強調機制(創建內容),而不是意圖(給我一個值)。 例如,某些實現可能會緩存和重用值,這意味着並非總是這樣創建的。
  5. createError ,與create相同。

我傾向於以一種功能風格進行編碼,因此,我的偏好可能是#3,部分原因是如果我靜態導入Error那么我可以簡單地將其稱為error(msg, i) ,它看起來可讀並模仿實際的構造方法用法。 但是,它可能導致與同名的局部變量混淆。 例如error = error(msg, i); 看起來很混亂。

我希望看到支持特定方法的證據或論據,而不是簡單的“我喜歡xxx”答案。

如果最近添加了JDK是一個很好的指示,那么您可以看一下java.time

就方法的數量而言,API具有相對較大的表面積。 通過使用一致的方法前綴,可以使此操作易於管理。

  • of -靜態工廠方法
  • parse -靜態工廠方法側重於解析
  • [...]

of看起來像你的使用情況合理的候選人,但大概什么更重要的不是選擇的是一致性。

在“有效的Java”中,除了您已經提到的“ valueOf”和“ of”之外,Joshua Bloch還提出了以下建議:

  1. getInstance

  2. newInstance

  3. 獲取類型(即getError)

  4. 類型(即newError)

一個很好的名字是newError(...) 這表明該班級本身也是一個工廠。

當工廠方法使用某種類型的緩存時of可以使用valueOfof從而不必調用方法來創建新實例。

newClassNamecreateClassName用於常規工廠方法,在該工廠方法總是嘗試創建實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM