- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Java 创建一个执行数据移动任务(如复制、移动等)的应用程序
在更高层次上,我可以在对象层次上提供这些操作。
示例代码:
public class DataSource {
public boolean copy(DataSource dsDestination);
public boolean copy(DataSource dsDestination, Filter filter);
public boolean move(DataSource dsDestination);
public boolean exists();
// some other 10-15 methods
}
或者我可以提供一个带有静态方法的工具:
public class DataSourceUtil {
public static boolean copy(DataSource dsSource, DataSource dsDestination);
public static boolean copy(DataSource dsSource, DataSource dsDestination, Filter filter);
public static boolean move(DataSource dsSource, DataSource dsDestination);
public static boolean exists(DataSource dsSource);
// some other 10-15 methods
}
哪种方法在内存管理方面更好?
最佳答案
黄金法则是:static 是良好 OO 设计中的异常。您只有在有充分理由的情况下才使用它。
你看,static 导致类之间的直接耦合。它使测试更加困难。当然,静态方法本身可以很容易地测试,但是如果你想测试一个调用这些静态方法的方法(并且你需要影响静态方法正在做什么)会怎样?那么您可能会想转向 Powermock 以模拟这些静态调用。这并不是一个好主意。
如果你坚持分离功能,你最好使用接口(interface),比如:
public class DataSource {
... ctor, equals, ... methods
}
public interface DataSourceCopyAbility {
public void copy(DataSource source, DataSource destintion);
加上相应的实现类。
编辑:当然,方便可以成为使用静态方法的正当理由;例如,我一直在代码中使用 Objects.requireNonNull() 。 但是:那些是标准的 API 调用。当我在我的代码中使用它们时,我真的不介意它们运行。我知道永远不会想“模拟”这种静态方法调用!
最后:我假设您希望在操作通过时返回 true。 坏主意: boolean 值只能用于区分真假。它们不是返回代码!
如果像复制 DataSource 这样复杂的操作失败了——然后抛出一个异常!或者,如果您真的想要无一异常(exception),请定义您自己的特定 ReturnCode 类,让您深入了解失败的操作!
关于java - 非静态方法与使用静态方法的 Utilty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39586784/
我正在用 Java 创建一个执行数据移动任务(如复制、移动等)的应用程序 在更高层次上,我可以在对象层次上提供这些操作。 示例代码: public class DataSource { publ
我是一名优秀的程序员,十分优秀!