我正在尝试执行以下操作:
private static final ImmutableMap<String, List<?>> lists = ImmutableMap.of(
"A", new ArrayList<String>(),
"B", new ArrayList<Integer>());
本质上,我试图捕捉的主要区别是不同的值具有不同的类型参数。然而,这给出了错误:
Type mismatch: cannot convert from
ImmutableMap<String,ArrayList<? extends Object&Serializable&Comparable<?>>>
to ImmutableMap<String,List<?>>
是否有更好的方法来做到这一点或解决这个问题?
最佳答案
您的代码在 Java 1.8 中编译良好,但在 Java 1.7 中编译失败。 Java 1.8 中包含 improved target type inference .
基本上,这意味着在 Java 1.7 中,编译器将尽可能推断泛型类型参数的最具体类型,即使这会导致目标类型出现编译器错误(在本例中为 ImmutableMap<String, List<?>>
)。
在 Java 1.8 中,考虑了目标类型,因此映射值的类型参数被视为 List<?>
而不是ArrayList<? extends Object&Serializable&Comparable<?>>
.
您可以升级到 Java 1.8,也可以为 the of
method 的调用提供显式类型参数。 .
private static final ImmutableMap<String, List<?>> lists =
// vvvvvvvvvvvvvvvvv
ImmutableMap.<String, List<?>>of(
"A", new ArrayList<String>(),
"B", new ArrayList<Integer>());
关于java - 使用不同泛型类型参数映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600565/