有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何初始化使用另一个映射作为值的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) 个答案

  1. # 1 楼答案

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

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

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