Как заменить Гуава новым MapMaker (). SoftValues ​​(). MakeMap () из Гуавы 17 - PullRequest
0 голосов
/ 22 января 2019

Я использовал Guava 17.0 с этим

private static final ConcurrentMap<String, Buffered> imageMap =
        new MapMaker().softValues().makeMap();

Только что обновил до Guava 27 и обнаружил, что softValues() был перемещен в CacheBuilder, поэтому я могу сделать

CacheBuilder.newBuilder().softValues()

но нет makeMap() метода, так что мне заменить.

1 Ответ

0 голосов
/ 22 января 2019

См. 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...