当类不需要跟踪内部状态时,我倾向于将类中的所有方法声明为静态。例如,如果我需要将 A 转换为 B 并且不依赖于某些可能变化的内部状态 C,我会创建一个静态转换。如果我希望能够调整内部状态 C,那么我会添加一个构造函数来设置 C,并且不使用静态转换。
我阅读了各种关于不要过度使用静态方法的建议(包括 StackOverflow 上的建议),但我仍然无法理解上述经验法则有什么问题。
这是一个合理的方法吗?
最佳答案
常见的静态方法有两种:
- “安全”的静态方法将始终为相同的输入提供相同的输出。它不修改全局变量,也不调用任何类的任何“不安全”静态方法。本质上,您正在使用一种有限的函数式编程——不要害怕这些,它们很好。
- “不安全”的静态方法会改变全局状态、全局对象的代理或其他一些不可测试的行为。这些都是过程式编程的倒退,如果可能的话应该进行重构。
“不安全”静态有一些常见的用途——例如,在单例模式中——但要注意,尽管你给它们起了任何漂亮的名字,但你只是在改变全局变量。在使用不安全的静力学之前请仔细考虑。
关于language-agnostic - 使用大量静态方法是一件坏事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/752758/