Java 错误做法:新... ().doSomething()?
Java bad practice doing: new... ().doSomething()?
我刚刚看到一段代码,其中一些 类 只有一种方法。我选了一个例子:
public class TempDirCleanupProcess {
public void cleanup(final File directory) {}
}
然后,稍后在代码中按以下方式调用该方法:
new TempDirCleanupProcess().cleanup(tempDir);
现在我想知道这是否是一种不好的做法,因为我以前只在静态方法中看到过这样的 "behavior"。
对此有何看法?
另一种方法是使用这样的目录 class
Directory temp = new Directory('path/to/file');
temp.cleanup()
这还允许您在需要所有这些实用程序功能的其他一些 class 中继承目录 class。
也就是说,class 中的效用函数应该是静态的。
它看起来像一个标准的静态方法,但我们看不到所有细节
因此,当您创建对象时,您可能也在创建方法中使用的实例成员 cleanup
,您必须创建对象才能使它们可用
当然,它可以用静态方法重构为 class。它将避免每次需要调用该方法时都需要创建一个实例。在这种没有给出额外上下文的特殊情况下,静态方法将是更好的解决方案。
但是,不要忘记 class 可以保存一个状态,并且单个方法可以更改该状态和 return 对当前对象的引用。
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()
行执行后不会丢失
我刚刚看到一段代码,其中一些 类 只有一种方法。我选了一个例子:
public class TempDirCleanupProcess {
public void cleanup(final File directory) {}
}
然后,稍后在代码中按以下方式调用该方法:
new TempDirCleanupProcess().cleanup(tempDir);
现在我想知道这是否是一种不好的做法,因为我以前只在静态方法中看到过这样的 "behavior"。 对此有何看法?
另一种方法是使用这样的目录 class
Directory temp = new Directory('path/to/file');
temp.cleanup()
这还允许您在需要所有这些实用程序功能的其他一些 class 中继承目录 class。
也就是说,class 中的效用函数应该是静态的。
它看起来像一个标准的静态方法,但我们看不到所有细节
因此,当您创建对象时,您可能也在创建方法中使用的实例成员 cleanup
,您必须创建对象才能使它们可用
当然,它可以用静态方法重构为 class。它将避免每次需要调用该方法时都需要创建一个实例。在这种没有给出额外上下文的特殊情况下,静态方法将是更好的解决方案。
但是,不要忘记 class 可以保存一个状态,并且单个方法可以更改该状态和 return 对当前对象的引用。
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()
行执行后不会丢失