1

これが可能かどうかはよくわからないので、皆さんに尋ねます。以前にアクセスしたことがあるかどうか、前回アクセスしたときと同じ値を返すかどうかを知るメソッドを書きたいと思います。これにはフィールド/インスタンス変数を使用できません。

これは、インスタンス変数 foo なしで、私がやりたいことです:

private FooObject foo = null;
public int setFoo(FooObject in)
{
    if(foo == null)
        foo = in;

    return foo.getX();
}

これはできますか?

4

5 に答える 5

5

それが以前に訪問されたかどうかを知っている

以前に何が起こったかを知るには、メモリ、つまり状態が必要です。したがって、その知識を保存するための何かが必要になります。あなたはそれを避けることはできません。

于 2012-04-30T21:15:23.430 に答える
1

私は@OliCharlesworthに同意します、あなたは州なしでこれを行うことはできません。ただし、フィールドを使用して状態を保存することは、多くのオプションの1つにすぎません。たとえば、System.setProperty()およびSystem.getProperty()を使用して状態をシステムプロパティとして保存したり、状態をファイルに保存したりできます。状態をデータベースに保存することもできます。

于 2012-04-30T21:35:32.217 に答える
0

Preferences APIを使用できます。ただし、これにより、アプリケーションのロード全体でメモリを保存できるため、ロードするたびに再起動する場合は、シャットダウン フックを設定して、Preferences API から値をクリアする必要があります。

于 2012-04-30T22:39:23.513 に答える
0

キャッシュを使用できます。入力を探すためにキャッシュから読み取ります。入力が既にキャッシュにある場合は、キャッシュから値を返します。そうでない場合は、エントリをキャッシュに入れ、新しく計算された値を返します。

CacheManager singletonManager = CacheManager.create();
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);
manager.addCache(memoryOnlyCache);
Cache cache = singletonManager.getCache("testCache");

新しいエントリーを入れる

Element element = new Element("key1", "value1");
cache.put(element);

チャッシュで探している:

Element element = cache.get("key1");
Object value = element.getObjectValue();

削除する場合:

cache.remove("key1");

これをディスクに永続化できます。

詳細については、http://ehcache.org/を参照してください。

于 2012-04-30T21:46:06.487 に答える
0

インスタンス変数を使わずに? いいえ、できません。メソッドが呼び出し間で何かを「記憶」する方法が必要です-ローカル変数は機能しません。メソッド呼び出しの外で「生きている」ものでなければなりません。それがインスタンス変数の目的です。状態を保存し、すべてのインスタンス メソッドから参照できます。

于 2012-04-30T21:15:24.067 に答える