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

时间:2012-01-30 01:27:29

标签: 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>

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

1 个答案:

答案 0 :(得分:19)

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

相信我们:这是我们花费了大量时间的事情。在这个issue中,Kevin提到我们试图尝试获取它的方法不少于十五种,因此您不必明确指定这些类型参数。

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