spring - 如果该类不包含状态,使用非静态类是否合理?

标签 spring oop static

在我的工作场所,目前似乎有一场反对静态类的运动。我能理解其中的一部分,他们确实打破了整个单元测试模块化的事情。但是,我看到大量要求删除静态类的代码审查。

一个常见的情况是一个实用程序类,它被 spring 注入(inject)了一些在编译时“已知”的其他对象。它没有其他成员变量。如果类 M 正在调用这个静态类,我总是看到建议使这个实用程序类成为非静态类并将其注入(inject)类 M。

这对我来说没有意义。我没有特别看到它有什么问题,除了它似乎是在浪费时间并且使实用程序类不那么容易使用。据我所知,理由通常是单元测试,但我不喜欢必须更改有效代码以符合测试范例的想法。诚然,模拟一个简单的静态实用程序类可能有点矫枉过正。

静态类是否适合此用例,还是最好避免使用?

最佳答案

我认为这两种方法的差异很小,但只要类不包含状态,将其设为静态会稍微好一些。假设我在 A 类中有这段代码:

StaticClass.utilMethod()

如果我想在 B 类中使用此代码,我可以复制并粘贴。而已。没有添加成员变量,注入(inject)等cmd-c cmd-v。

考虑到您现有的代码使用静态类并进行修改,因此最好继续使用静态类。

关于spring - 如果该类不包含状态,使用非静态类是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907532/

相关文章:

c++ - 静态成员与静态常量成员实例化 - 有什么区别?

java - 使用声明初始化变量或静态初始化之间有区别吗?

python - 如何在 Python 中组合自定义对象来创建一个维护底层对象接口(interface)的集合?

php - 无法增加静态类变量 PHP

java - 没有 "java.lang.Class<org.springframework.data.repository.Repository<?, ?>>"类型的合格 bean

java - Spring 3 注释配置选择@Configuration 和@Component 但不是@Controller

javascript - JavaScript 中原型(prototype)链的结尾是什么——null 或 Object.prototype?

c++ - Arduino类初始化执行

spring - 避免警告 : Hessian/Burlap: <class> is an unknown class in WebappClassLoader

java - 如何在 Spring Boot 中模拟数据库连接以进行测试?