Pattern for C-style static variables in Java?
在Java中创建C风格静态变量的最佳方法是什么(本地到方法)?
我有一个方法,我只需要计算一次变量,而不需要在对象的生命周期内重新计算它。
我知道我可以创建一个最终字段,但是在所有情况下,这个变量可能都不是必需的,并且只有当客户机调用了有问题的方法时才需要。
关于我怎样才能做到这一点有什么建议吗?
C++静态局部与懒惰初始化的静态字段相等。
C++:
1 2 3 4 5 6 | class Example { public: void method() { static Something something; } }; |
爪哇:
1 2 3 4 5 6 | public class Example { private static Something something; public void method() { if (something == null) something = new Something(); } } |
local to a method
for the lifetime of the object
对于我来说,这两个句子在Java世界中是互斥的。您需要一个方法或实例变量的局部变量。从你所说的判断,你想要后者。要初始化它,您可以使用懒惰的加载模式,该模式将在需要时(并且仅在需要时)初始化它。缺点是检查其他方法是否已初始化。
在爪哇做事情并不是最好的主意。
我将在调用这个东西的任何地方使用惰性初始化。局部记忆如果经过深思熟虑,会比将其分布到多个类上造成更少的混乱。
如果需要共享,那么for-the-rest无状态服务中的惰性静态初始化比单例服务更好。如果缓存/内存化是本地的(并且是适当的),那么它不会破坏"无状态"的心理图,这有助于保持代码的整洁。
然而,缓存/内存化是一个很难测试的问题。但是模拟无状态bean很简单,并且独立地验证缓存的工作也很容易。
我认为您可能指的是"懒惰缓存"类型的策略。这样地:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
使用延迟加载模式。