Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java使用具有非void返回类型的setter方法是否违反了自己的规则?_Java_Nio_Setter - Fatal编程技术网

Java使用具有非void返回类型的setter方法是否违反了自己的规则?

Java使用具有非void返回类型的setter方法是否违反了自己的规则?,java,nio,setter,Java,Nio,Setter,我被告知,标准惯例是二传手不归还任何东西。但是,NIO.2API有一些方法,如setOwner、setLastModifiedTime和setAttribute,它们返回路径实例。这些方法不是真正的setter吗?或者不是所有setter都必须有void返回类型吗?用于帮助处理工具以便自动处理JavaBean的方法可能已经提到了void setter,但其目的是使事情变得更简单 允许方法链接可以产生更好的代码,而且由于没有充分的理由要求setters提供void返回类型,因此他们选择使用程序来获

我被告知,标准惯例是二传手不归还任何东西。但是,NIO.2API有一些方法,如setOwner、setLastModifiedTime和setAttribute,它们返回路径实例。这些方法不是真正的setter吗?或者不是所有setter都必须有void返回类型吗?

用于帮助处理工具以便自动处理JavaBean的方法可能已经提到了void setter,但其目的是使事情变得更简单

允许方法链接可以产生更好的代码,而且由于没有充分的理由要求setters提供void返回类型,因此他们选择使用程序来获取它们没有看到的注释:

path.setOwner(foo).setLastModifiedTime(bar).setAttribute(baz);
JDK在诸如StringBuilder和ProcessBuilder之类的类中确实有fluent接口的示例,但它们避免使用setXXX术语,即使在有意义的情况下也可能避免混淆。StringBuilder.append显然不会被命名为setMoreText,但ProcessBuilder.directoryFile不如setWorkingDirectoryFile IMHO明显。

该文件旨在帮助处理工具,以便自动处理JavaBeans,它可能提到了一些有关无效设置器的内容,但旨在使事情变得更简单

允许方法链接可以产生更好的代码,而且由于没有充分的理由要求setters提供void返回类型,因此他们选择使用程序来获取它们没有看到的注释:

path.setOwner(foo).setLastModifiedTime(bar).setAttribute(baz);

JDK在诸如StringBuilder和ProcessBuilder之类的类中确实有fluent接口的示例,但它们避免使用setXXX术语,即使在有意义的情况下也可能避免混淆。StringBuilder.append显然不会命名为setMoreText,但ProcessBuilder.directoryFile不如setWorkingDirectoryFile IMHO明显。

setter通常用作更改对象状态的访问器方法。正如Kayaman所提到的,返回对象本身以创建一个流畅的api而不是void是很有用的——在处理这些对象时,将其视为语法糖


然而,在NIO的情况下,类文件的一个静态方法改变了作为第一个参数给出的路径的状态——因此在这种情况下,它不是一个访问器,而是一个在名称中设置的普通方法。

setter通常被用作一个访问器方法来改变对象的状态。正如Kayaman所提到的,返回对象本身以创建一个流畅的api而不是void是很有用的——在处理这些对象时,将其视为语法糖


然而,在NIO的情况下,类文件的静态方法会更改作为第一个参数给出的路径的状态,因此在这种情况下,它不是访问器,而是在名称中设置的普通方法。

没有规则。他们可能不是真正的二传手,但这有什么关系呢?如果您一开始就过度依赖setter,那么您的设计可能很糟糕。您可能会注意到,这些都是静态函数。并且不更改此对象的任何属性。它正在改变外部的东西,而不是当前对象。无论如何,无效不是必须的。考虑这样的例子:路径文件=文件。有时返回文件路径非常有用。没有规则。他们可能不是真正的二传手,但这有什么关系呢?如果您一开始就过度依赖setter,那么您的设计可能很糟糕。您可能会注意到,这些都是静态函数。并且不更改此对象的任何属性。它正在改变外部的东西,而不是当前对象。无论如何,无效不是必须的。考虑这样的例子:路径文件=文件。有时返回文件路径非常有用。实际上,所有方法setOwner、setLastModifiedTime和setAttribute都是java.nio.file.Files类中的静态方法。您不能像以前那样链接它们,但是链接的想法仍然适用,因为,比方说,Files.setLastModifiedTimePath,FileTime返回第一个参数。链接可能如下所示:Files.setLastModifiedTimemyPath、myFileTime。resolveanotherPath@EugenCovaci这改变了问题的精神。我假设这个类是Path,而不是Path,它是静态实用程序方法的集合,不使用fluent接口。让我们看看JDK中是否真的有合适的fluent构建器。这个答案不正确。JDK中可能没有setXXX会返回这个,尽管例如StringBuilder.append和其他一些确实提供了一个流畅的接口,所以JDK开发人员可能会遵守他们的规则。JavaBean规范肯定不是过时的。由JSP使用,JSF使用它们。使用它们。JAXB使用它们。我会使用它们。这里有一个迟来的评论。你说这个答案不对。JDK中可能没有setXXX会返回这个。实际上,我在java.ni中找到了一个
o、 channels.AsynchronousServerSocketChannel类。看看setOptions方法实际上,所有方法setOwner、setLastModifiedTime和setAttribute都是java.nio.file.Files类中的静态方法。您不能像以前那样链接它们,但是链接的想法仍然适用,因为,比方说,Files.setLastModifiedTimePath,FileTime返回第一个参数。链接可能如下所示:Files.setLastModifiedTimemyPath、myFileTime。resolveanotherPath@EugenCovaci这改变了问题的精神。我假设这个类是Path,而不是Path,它是静态实用程序方法的集合,不使用fluent接口。让我们看看JDK中是否真的有合适的fluent构建器。这个答案不正确。JDK中可能没有setXXX会返回这个,尽管例如StringBuilder.append和其他一些确实提供了一个流畅的接口,所以JDK开发人员可能会遵守他们的规则。JavaBean规范肯定不是过时的。由JSP使用,JSF使用它们。使用它们。JAXB使用它们。我会使用它们。这里有一个迟来的评论。你说这个答案不对。JDK中可能没有setXXX会返回这个。实际上,我在java.nio.channels.AsynchronousServerSocketChannel类中找到了一个。看看setOptions方法只是为了澄清一下:Path的实现应该是不可变的,因此文件的方法永远不会改变Path实例的状态。Path参数所做的是指向要访问/修改的数据,例如本机文件系统上的文件。仅供澄清:Path的实现应该是不可变的,因此文件的方法永远不会更改Path实例的状态。Path参数的作用是指向要访问/修改的数据,例如本机文件系统上的文件。