我想尝试做以下事情:
private static final ImmutableMap> lists = ImmutableMap.of( "A", new ArrayList (), "B", new ArrayList ());
本质上,我试图捕获的主要区别是不同的值具有不同的类型参数.但是这会给出错误:
Type mismatch: cannot convert from ImmutableMap>> to ImmutableMap >
是否有更好的方法来解决这个问题?
您的代码在Java 1.8中编译得很好,但它无法在Java 1.7中编译.Java 1.8中包含改进的目标类型推断.
基本上这意味着在Java 1.7中,编译器将推断可能的泛型类型参数的最具体类型,即使这将导致编译器错误与目标类型(在本例中ImmutableMap
).
在Java 1.8中,考虑了目标类型,使得映射值的类型参数List>
取而代之ArrayList extends Object&Serializable&Comparable>>
.
您可以升级到Java 1.8,也可以为of
方法调用提供显式类型参数.
private static final ImmutableMap> lists = // vvvvvvvvvvvvvvvvv ImmutableMap. >of( "A", new ArrayList (), "B", new ArrayList ());