Java не имеет статических локальных переменных в функциях (как в C); final
означает нечто совершенно отличное от того, что вы делаете.
Единственный способ получить статический тип - использовать экземпляр или член класса, например ::10000
class Foo {
private Cursor theCursor;
private synchronized Cursor getAllContactsCached() {
if (this.theCursor == null) {
this.theCursor = this.getList();
}
return this.theCursor;
}
}
(Это специфичный для экземпляра способ; вы также можете сделать это для всего класса, но я предполагаю, что это не подходит для Cursor
.)
Обратите внимание, что весь метод синхронизирован. Это важно, если крайне важно , чтобы у вас был только один экземпляр курсора. Если это всего лишь оптимизация, и не имеет решающего значения, вы можете жить с условием гонки и не синхронизироваться, и в этом случае вы можете получить два разных курсора, возвращаемых функцией. (Вы можете испытать желание использовать дважды проверенную идиому блокировки , но она не работает с Java, если вы не используете переменную volatile
, и она в конечном итоге становится просто лучше идти вперед и синхронизировать.)