为什么ImmutableMap.builder().build()选择正确的类型参数?

Gil*_*ili 10 java guava

为什么Map<String, ?> test = ImmutableMap.builder().build();编译失败,但Map<String, ?> test = ImmutableMap.<String, Object>builder().build();工作正常?

第一个代码片段失败:

error: incompatible types
  Map<String, ?> test = ImmutableMap.builder().build();
                                                   ^
  required: Map<String,?>
  found:    ImmutableMap<Object,Object>
Run Code Online (Sandbox Code Playgroud)

我相信番石榴提交者意味着这个工作.

Lou*_*man 19

这不是Guava的失败,而是Java解析泛型的方式,而这是我们无法控制的.=(

相信我们:这是我们花了很多时间的事情.在本期中,Kevin提到我们试图尝试获取它的方法不少于15种,因此您不必明确指定这些类型参数.

如果您只对ImmutableMap.builder().build()地图中的条目感兴趣,那么您应该使用ImmutableMap.of().这对于泛型不会有任何有趣的问题:它只会起作用.