繁体   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