在Java中创建C样式静态变量的最佳方法是什么?(方法的本地)?
我有一种方法,我只需要计算一次变量,并且不需要在对象的生命周期内重新计算它。
我知道我可以创建一个final字段,但是在所有情况下可能都不需要此变量,只有在客户端根本调用此方法时才需要此变量。
关于如何实现这一目标的任何指示?
答案 0 :(得分:4)
C ++静态本地等效于具有延迟初始化的静态字段。
C ++:
class Example {
public:
void method() {
static Something something;
}
};
的Java:
public class Example {
private static Something something;
public void method() {
if (something == null) something = new Something();
}
}
答案 1 :(得分:1)
我会在调用此东西的地方使用延迟初始化。如果仔细考虑,本地记忆会产生比在多个类上分发更少的混乱。
如果你需要共享,那么对于其余无状态服务而言,懒惰的静态初始化优于Singleton。如果缓存/ memoization是本地的(并且是适当的),它不会破坏“无状态”的心理图片,这有助于保持代码清洁。
然而,缓存/ memoization是一个痛苦的测试。但是模拟无状态bean是微不足道的,并且独立验证缓存也很容易。
答案 2 :(得分:1)
方法的本地
对于物体的寿命
对我来说,这两个句子在java世界中是互斥的。您要么需要方法或实例变量的本地变量。从你说的话来看,你想要后者。要初始化它,你可以像已经说过的那样使用延迟加载模式,它将在你需要的时候初始化它。缺点是检查其他方法是否已初始化。
用Java做事C方式并不是最好的想法。
答案 3 :(得分:0)
使用Lazy Load模式。
答案 4 :(得分:0)
我认为你可能指的是“懒惰缓存”类型的策略。像这样:
class LazyCacheExample {
Integer x = null;
public Integer calculateX() {
// if x has not been calculated yet, calculate it now
if (null == this.x) {
// TODO consider thread safety here...
this.x = 2+2;
}
// otherwise return the calculated object
return this.x;
}
}