我刚刚看到了一段代码,其中只有一个方法具有一些类。我举了一个例子:
public class TempDirCleanupProcess {
public void cleanup(final File directory) {}
}
然后,在代码的稍后部分中,该方法被称为以下方式:
new TempDirCleanupProcess().cleanup(tempDir);
现在我想知道这是否是一个不好的做法,因为我以前仅使用静态方法看到过这种“行为”。 有什么反对意见吗?
答案 0 :(得分:4)
当然,可以使用静态方法将其重构为类。它将消除每次需要调用该方法时都创建实例的需要。在这种情况下,如果没有给出其他上下文,则静态方法将是更好的解决方案。
但是,不要忘记,一个类可以保留一个状态,并且一个方法可以更改该状态并返回对当前对象的引用。
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()
的引用不会在执行该行后丢失。
答案 1 :(得分:3)
它看起来像一个标准的静态方法,但是我们看不到所有细节
因此,也许在创建对象时,您还同时创建了cleanup
方法中使用的实例成员,并且必须创建该对象才能使它们可用
答案 2 :(得分:1)
另一种方法是拥有这样的Directory类
Directory temp = new Directory('path/to/file');
temp.cleanup()
这还允许您继承其他需要所有这些实用程序功能的类中的Directory类。
也就是说,像您这样的类中的实用程序函数应该是静态的。