代码之家  ›  专栏  ›  技术社区  ›  Debajit

Java中C风格静态变量的模式?

  •  4
  • Debajit  · 技术社区  · 14 年前

    在Java中创建C风格静态变量(方法的本地变量)的最佳方法是什么?

    我有一个方法,我只需要计算一次变量,而不需要在对象的生命周期内重新计算它。

    关于我如何做到这一点有什么建议吗?

    5 回复  |  直到 14 年前
        1
  •  4
  •   Gunslinger47    14 年前

    C++静态局部与静态字段的延迟初始化是等价的。

    C++:

    class Example {
     public:
      void method() {
        static Something something;
      }
    };
    

    public class Example {
        private static Something something;
        public void method() {
            if (something == null) something = new Something();
        }
    }
    
        2
  •  1
  •   Peter Tillemans    14 年前

    不管这个东西叫什么,我都会使用延迟初始化。如果经过深思熟虑的话,本地回忆录会比在多个类中分发它造成更少的混乱。

    然而,缓存/记忆化是一个很难测试的问题。但是模拟无状态bean是很简单的,独立地验证缓存的工作也很容易。

        3
  •  1
  •   Mateusz Dymczyk    14 年前

    方法的局部性
    在对象的生命周期内

    对我来说,这两句话在java世界中是相互排斥的。您要么想要方法的局部变量,要么想要实例变量。从你所说的来看,你想要后者。要初始化它,您可以使用,正如有人已经说过的,延迟加载模式,它将在您需要它的时候,并且仅在您需要它的时候初始化它。缺点是检查其他方法是否已初始化。

        4
  •  0
  •   Mike    14 年前

    使用 Lazy Load 图案。

        5
  •  0
  •   Robert Christian    14 年前

    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;
        }   
    }