Как инициировать 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));
Обратите внимание, что синхронизация внешней карты не обеспечивает потокобезопасность ее содержимого.