我刚刚看到一段代码,其中一些类只有一个方法。我选择了一个例子:
public class TempDirCleanupProcess {
public void cleanup(final File directory) {}
}
然后,稍后在代码中,该方法以下列方式调用:
new TempDirCleanupProcess().cleanup(tempDir);
现在我想知道这是否是一种不好的做法,因为我以前只使用静态方法看到过这种“行为”。对此有何看法?
我刚刚看到一段代码,其中一些类只有一个方法。我选择了一个例子:
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 类。
话虽如此,像您这样的类中的实用函数应该是静态的。