静态与实例化

Static vs. Instantiation

假设您有一个 Writer class 将 obj 写入 fileName。你愿意

new Writer(fileName, obj).Write();

Writer.Write(fileName, obj);

?

如果 Writer 被分成子方法,您不必在第一种情况下将 obj 传递给每个新方法。第二种方法可能更快,并且不会实例化新对象。

将事实视为:

  • 测试对您很重要?
  • 如果 Writer 保留在内存中(静态变量不会从内存中清除)就会有问题
  • 你想要一个线程安全的软件? (它们将共享同一个实例,因此您可以获得 exceptions/problems)

这个问题可以帮助你更深入。

Why are static variables considered evil?

还要决定是否应该将其设为静态:

Java: when to use static methods

这基本上可以归结为 Writer 是有状态的还是无状态的。即,当您调用 Write 时,如果某些内部变量发生变化,那么理想情况下您希望创建 Writer

的实例

如果 Write 方法是完全独立的,那么将它作为 Writer class 的静态方法是完全有效的。

但是,如果目标定义得更好,即 Write(FileStream file, Foo object),那么您可以选择制作扩展方法而不是整个静态 Writer class。