gpt4 book ai didi

java - 实用程序类应该是静态的吗?

转载 作者:IT老高 更新时间:2023-10-28 13:52:08 25 4
gpt4 key购买 nike

如果我必须设计一个实用程序类(例如 ByteUtils 或 StreamUtils 或 StringUtils),那么对它们来说最好的设计选择是什么。

  • 它们应该是静态类吗(因为我不会存储任何状态)
  • 它们是否应该是非静态类(这样如果不使用对象,它们将被 gc'd)

PS:静态类是指具有静态方法的类(而不是内部静态类)

请就此设计选择提供建议?

最佳答案

我的实用程序类如下所示:

// final, because it's not supposed to be subclassed
public final class FooUtil {

// private constructor to avoid unnecessary instantiation of the class
private FooUtil() {
}

public static int doSomethingUseful() {
}

// ...
}

请注意,尽管这使实用方法易于测试,并且易于从外部访问,但它也使使用它们的类难以进行单元测试,因为模拟这些实用方法并不容易。拥有太多此类实用程序类可能表明缺乏 OO 设计(过程编程),并且确实会使代码难以测试。

如果您使用的是依赖注入(inject)框架(Spring、Guice 等),最好使用非静态方法使实用程序类可实例化,并使其成为可注入(inject)的单例。这样,使用这些实用方法的类可以通过模拟实用对象来进行测试。

关于java - 实用程序类应该是静态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com