Java 是否使用具有非空 return 类型的 setter 方法打破了自己的规则?
Is Java breaking its own rules with setter methods that have non-void return types?
我被告知标准惯例是让设置者不要 return 任何东西。然而,NIO.2 API 有一些方法,如 setOwner、setLastModifiedTime 和 setAttribute return Path 实例。这些方法不是真正的 setter,或者不是所有的 setter 都必须有 void return 类型?
obsolete JavaBean standard (which was meant to help with tooling so that JavaBeans could be automatically handled) may have said something about void setters, but Fluent Builder旨在让事情变得更简单。
允许方法链接可以生成更好的代码,并且由于没有充分的理由要求 setter 提供 void
return 类型,他们选择使用该程序(不,他们没有看到评论):
path.setOwner(foo).setLastModifiedTime(bar).setAttribute(baz);
JDK 在 类 中确实有像 StringBuilder
和 ProcessBuilder
这样的流畅界面的例子,但他们避免使用 setXXX
命名法(可能是为了避免混淆),即使它有意义。 StringBuilder.append()
显然不会被命名为 setMoreText()
,但是 ProcessBuilder.directory(File)
不如 setWorkingDirectory(File)
恕我直言。
A setter 通常用作更改对象状态的访问器方法。正如 Kayaman 提到的那样,return 对象本身创建流畅的 api 而不是 void 可能很有用 - 在处理这些对象时,将其视为语法糖。
然而,在 NIO 的情况下,它是 class "Files" 的静态方法,它改变作为第一个参数给出的 Path 的状态 - 所以在这种情况下它不是访问器但是 "normal" 名称中包含 "set" 的方法。
我被告知标准惯例是让设置者不要 return 任何东西。然而,NIO.2 API 有一些方法,如 setOwner、setLastModifiedTime 和 setAttribute return Path 实例。这些方法不是真正的 setter,或者不是所有的 setter 都必须有 void return 类型?
obsolete JavaBean standard (which was meant to help with tooling so that JavaBeans could be automatically handled) may have said something about void setters, but Fluent Builder旨在让事情变得更简单。
允许方法链接可以生成更好的代码,并且由于没有充分的理由要求 setter 提供 void
return 类型,他们选择使用该程序(不,他们没有看到评论):
path.setOwner(foo).setLastModifiedTime(bar).setAttribute(baz);
JDK 在 类 中确实有像 StringBuilder
和 ProcessBuilder
这样的流畅界面的例子,但他们避免使用 setXXX
命名法(可能是为了避免混淆),即使它有意义。 StringBuilder.append()
显然不会被命名为 setMoreText()
,但是 ProcessBuilder.directory(File)
不如 setWorkingDirectory(File)
恕我直言。
A setter 通常用作更改对象状态的访问器方法。正如 Kayaman 提到的那样,return 对象本身创建流畅的 api 而不是 void 可能很有用 - 在处理这些对象时,将其视为语法糖。
然而,在 NIO 的情况下,它是 class "Files" 的静态方法,它改变作为第一个参数给出的 Path 的状态 - 所以在这种情况下它不是访问器但是 "normal" 名称中包含 "set" 的方法。