См. MapMakerMigration на Wiki :
Все методы кэширования на MapMaker
устарели в пользу
аналогичных методов в CacheBuilder
, и запланированы на будущее
удаление. (...)
Большинство MapMaker
вариантов использования следует перенести в CacheBuilder
или
AtomicLongMap
. В частности, случаи, когда MapMaker используется для построения
карты со значениями AtomicLong
обычно должны быть перенесены в
AtomicLongMap
. Другие случаи, когда функциональность кэширования MapMaker
используется (включая все случаи использования MapMaker.makeComputingMap(Function)
)
следует перенести на CacheBuilder
.
Так что вопрос: вам действительно нужно использовать ConcurrentMap
интерфейс? Если да, используйте asMap()
представление, которое для некомпьютерных карт должно иметь такую же функциональность:
Возвращает представление записей, хранящихся в этом кэше, в виде потокобезопасной карты. Изменения, внесенные в карту, напрямую влияют на кэш.
В вашем случае это будет:
private static final Cache<String, Buffered> IMAGE_CACHE = CacheBuilder.newBuilder()
.softValues()
.build();
А затем используйте CACHE.asMap()
или используйте .asMap()
с явными параметрами типа для поля:
private static final ConcurrentMap<String, Buffered> IMAGE_MAP =
CacheBuilder.newBuilder()
.softValues()
.<String, Buffered>build()
.asMap();