2

在 Java 中,一个方法可以有任何接近 C 中的静态变量的东西吗?尽管 Java 没有提供一个,也就是说,它只会被初始化一次,并在后续的递归调用中保持最新的值

我可以将它传递回方法以获得最新值并根据某些仅适用一次的条件实现“仅初始化一次”

  int fun(.....,Nthcall,PseudoStatic)
   {if(NthCall==1)
     PseudoStatic=10
    //rest of code
      Pseudostatic=100
       fun(.....,Nthcall+1,PseudoStatic)
    }

没有更好的东西吗?

4

2 回答 2

4

为什么不向类声明一个静态变量?有关更多信息,请参阅有关实例和类变量的教程

请注意,如果多个线程使用同一个类,这不是线程安全的。因此,您最好在每次调用时定义一个类成员变量。

于 2012-10-25T23:08:09.457 回答
1

我们可以做这样的事情

public void test()
{
    StaticVar<Integer> s1 = new StaticVar<Integer>(){};

    StaticVar<Long> s2 = new StaticVar<Long>(){};

    Integer v1 = s1.get();
    System.out.println(v1);
    s1.set( v1==null? 1 : v1+1 );

    Long v2 = s2.get();
    System.out.println(v2);
    s2.set( v2==null? 1 : v2*2 );
}

public abstract class StaticVar<V>
{
    public V get()
    {
        return (V)class2value.get(this.getClass());
    }

    public void set(V value)
    {
        class2value.put(this.getClass(), value);
    }

    static WeakHashMap<Class,Object> class2value = new WeakHashMap<>();
}

虽然它不是线程安全的。我们可以简单地添加synchronized(class2value). 或者使用弱并发哈希映射。

于 2012-10-26T00:40:10.813 回答