Java 错误做法做 : new. .. ().doSomething()?

标签 java constructor static-methods object-construction

我刚刚看到一段代码,其中一些类只有一个方法。我选了一个例子:

public class TempDirCleanupProcess {
  public void cleanup(final File directory) {} 
}

然后,稍后在代码中按以下方式调用该方法:

new TempDirCleanupProcess().cleanup(tempDir);

现在我想知道这是否是一种不好的做法,因为我以前只在静态方法中看到过这种“行为”。 对此有何看法?

最佳答案

当然,它可以重构为一个带有静态方法的类。它将避免每次需要调用该方法时都需要创建一个实例。在这种没有给出额外上下文的特殊情况下,静态方法将是更好的解决方案。

但是,不要忘记一个类可以保持一个状态,并且一个方法可以更改该状态并返回对当前对象的引用。

public class Builder {
  // state

  public Builder buildPart(T part) { 
      // update the state
      return this;
  } 

}

它类似于构建器模式的变体并且有意义。

return new Builder();
return new Builder().buildPart(partA);
return new Builder().buildPart(partA).buildPart(partB);

我还可以想到一个极其糟糕的设计,其中 this 会从 cleanup 中泄漏出来,所以对那个 的引用new TempDirCleanupProcess() 行执行后不会丢失。

关于Java 错误做法做 : new. .. ().doSomething()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725786/

相关文章:

java - 使用私有(private)静态方法

java - Eclipse中Java编写的语句生成返回数据类型的快捷键是什么?

java - 为什么构造函数的名称不能与类名不同,只要它们是唯一的

c# - 要静态还是不要静态

java - 如何拦截父类(super class)构造函数参数?

java - 应用程序构造函数中的异常 - 无法启动类

java - 为什么Java不允许覆盖静态方法?

java - WSO2 ESB 添加带有自定义证书的安全端点

java - 部署时使用 Guice InstantiationError 进行 RESTEasy(App Engine 本地)

Java - 从字符串中解析枚举的通用函数