Java には、関数内に静的なローカル変数がありません (C のように)。final
あなたがしていることとはまったく違うことを意味します。
その種の静的を取得できる唯一の方法は、インスタンスまたはクラス メンバーを使用することです。次に例を示します。
class Foo {
private Cursor theCursor;
private synchronized Cursor getAllContactsCached() {
if (this.theCursor == null) {
this.theCursor = this.getList();
}
return this.theCursor;
}
}
(これはインスタンス固有の方法です。クラス全体の方法でこれを行うこともできますが、それは a には適切ではないと思いCursor
ます。)
メソッド全体が同期されていることに注意してください。これは、カーソルのインスタンスを 1 つだけにすることが重要な場合に重要です。それが単なる最適化であり、重要ではない場合、競合状態に耐え、同期しない可能性があります。その場合、関数によって 2 つの異なるカーソルが返される可能性があります。(二重チェックのロックイディオムを使用したくなるかもしれませんが、volatile
変数を使用しない限り Java では機能せず、先に進んで同期した方が良い結果になります。)