Java에 함수에 정적 로컬 변수가 없습니다 (예 : C와 같습니다). final
은 자신이하는 것과 완전히 다른 것을 의미합니다. 정적의 종류를 얻을 수
유일한 방법은 인스턴스 또는 클래스 멤버, 예를 들어, 사용하는 것입니다
class Foo {
private Cursor theCursor;
private synchronized Cursor getAllContactsCached() {
if (this.theCursor == null) {
this.theCursor = this.getList();
}
return this.theCursor;
}
}
(즉, 인스턴스 별 방법을, 당신은 또한이 작업을 수행 할 수 있습니다 클래스 전체 그런데, 그게 맞을 것 같아요. Cursor
에 적합하지 않습니다.)
전체 메서드가 동기화되어 있습니다. 중요한 커서 인 경우에만이 중요합니다. 단순한 최적화이고 중요하지 않은 경우 경쟁 조건을 유지하면서 동기화하지 않아도됩니다.이 경우 함수에 의해 반환 된 두 개의 다른 커서로 끝날 수 있습니다. (당신은 double-checked locking idiom를 사용하는 유혹 수도 있지만 당신은 volatile
변수를 사용하지 않는 한 자바 작동하지 않으며, ends up just being better이 가서 동기화 할 수 있습니다.)
-1 - "최종 당신이 그것을 변경하지 않는 약속을 의미합니다 " - 잘못된. 그것은 당신이 그것을 바꿀 수 없다는 것을 의미합니다. 여기서 문제는 OP가 'c'의 범위/수명을 이해하지 못한다는 것입니다. –