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