如何初始化使用另一个地图作为值的 EnumMap

How to init EnumMap which uses another map as value

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

我想初始化一个线程安全的map map。首先,我尝试了上面的 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>>.

有人能帮忙吗?提前致谢!我知道 Generic 的基础知识,但真的很困惑 valueByKeyPerEdition 应该如何初始化。

Collections.synchronizedMap() returns 委托给其参数的不同 Map 实现,因此您需要将字段类型更改为 Map 而不是 EnumMap :

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

请注意,同步外部地图并不能确保其内容的线程安全。