Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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_Java_Coding Style - Fatal编程技术网

练习在Java中返回自身而不是void

练习在Java中返回自身而不是void,java,coding-style,Java,Coding Style,我的队友们向我介绍了一种新的练习写作方法,这种方法不会再次失效 public class Test { public Test doCalculations() { //code return this; } public Test appendTitle(String test) { //code return this; } } 他们建议返回对象本身,而不是返回void。他们说,这种方法的一个优点是,可以链接方法 而不

我的队友们向我介绍了一种新的练习写作方法,这种方法不会再次失效

public class Test {
   public Test doCalculations() {
      //code
      return this;
   }
   public Test appendTitle(String test) {
      //code
      return this;
   }
}
他们建议返回对象本身,而不是返回void。他们说,这种方法的一个优点是,可以链接方法

而不是写:

 while(1) {
    test.appendTitle("aaa");
    test.doCalculations();
    map.add(test);
 }
您可以编写更优雅的代码:

 while(1) {
     map.add(test.appendTitle("aaa").doCalculations());
 }

这种方法的缺点是什么?你建议把它包括在日常使用中吗?

我认为这不是一个好的做法。通过查看返回对象的方法签名,我如何知道返回的是全新实例还是现有实例
类的实例。

我建议您研究一下decorator设计模式。当然,您应该考虑何时应用它。称为fluent接口(但不是唯一的)。我建议在每次
之前先换行。在我的辩护中,我没有发现这个问题:“好处…”,而且这个问题问得很神秘,我想很多人都不会明白到底发生了什么。如果这个类被称为
生成器
或类似的东西,这在我看来是相当清楚的。没错,但这个问题似乎比这更一般。这不是一个坏的做法,事实上,它用于许多配置对象、构建器对象,而且,该死的,应该用在任何可以调用setter 1-2次以上的地方。很明显,它会返回自身,而不是一个新实例,否则,javadoc应该清楚地说明这一点。使用该模式的示例:Hibernate标准、Astyanax、Cloudera的hadoop配置等等。当然,他们的开发人员对开发API知道一两件事,所以在我看来,公认的答案是完全错误的。