静态与实例化
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。
假设您有一个 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。