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

我想初始化 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应该如何初始化真的很困惑。

4

1 回答 1

0

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

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

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

于 2017-12-11T23:58:25.283 回答