2

Java では、メソッドは C の静的変数に近いものを持つことができますか?Java は静的変数を提供しませんが、つまり、一度だけ初期化され、後続の再帰呼び出しで最新の値を保持します。

それをメソッドに戻して最新の値を取得し、1 回だけ真となる条件に基づいて「1 回だけ初期化」することができます。

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

もっといいものはないの?

4

2 に答える 2

4

クラスに変数 static を宣言するだけではどうですか? 詳細については、インスタンス変数とクラス変数に関するチュートリアルを参照してください。

複数のスレッドが同じクラスを使用する場合、これはスレッドセーフではないことに注意してください。したがって、呼び出しごとにクラス メンバー変数を定義する方がよい場合があります。

于 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 に答える