Java不好的做法:新..().doSomething().



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

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()的引用。

它看起来像一个标准的静态方法,但我们没有看到所有的细节

因此,也许在创建对象时,您也在创建方法cleanup中使用的实例成员,并且必须创建对象才能使它们可用

另一种方法是拥有这样的目录类

Directory temp = new Directory('path/to/file');
temp.cleanup()

这还允许您在需要所有这些实用程序函数的其他类中继承 Directory 类。

话虽如此,像您这样的类中的实用程序函数应该是静态的。

相关内容

  • 没有找到相关文章

最新更新