[英]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.