Как инициировать EnumMap, который использует другую карту в качестве значения

private static EnumMap<Edition, ListMultimap<KeyClass, ValueClass>> 
   valueByKeyPerEdition = Collections.synchronizedMap(
     new EnumMap<Edition, ListMultimap<KeyClass, KeyClass>>());

Я хочу, чтобы начать потокобезопасную карту карты. Во-первых, я попробовал функцию init выше, но она говорит no suitable constructor found for EnumMap, А потом я попытался добавить Edition.class, результат в new EnumMap<Edition, ListMultimap<KeyClass, KeyClass>>()); , это все еще не работает. Сообщение об ошибке incompatible types: no instance(s) of type variable(s) K,V exist so that Map<K,V> conforms to EnumMap<Edition, ListMultimap<KeyClass, ValueClass>>,

Кто-нибудь может помочь? Заранее спасибо! Я знаю основы общего, но действительно путаю valueByKeyPerEdition должен быть инициализирован.

1 ответ

Решение

Collections.synchronizedMap() возвращает другое Map реализация, которая делегирует свой аргумент, поэтому вам нужно изменить тип поля на Map вместо EnumMap:

private static Map<Edition, ListMultimap<KeyClass, ValueClass>> valueByKeyPerEdition =
        Collections.synchronizedMap(new EnumMap<>(Edition.class));

Обратите внимание, что синхронизация внешней карты не обеспечивает потокобезопасность ее содержимого.

Другие вопросы по тегам