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

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

我相信 Guava 提交者的本意是为了让它发挥作用。

最佳答案

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

相信我们:这是我们花费了很多时间的事情。在这个issue , Kevin 提到我们尝试了至少十五种方法来尝试获取它,这样您就不必显式指定这些类型参数。

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

关于java - 为什么 ImmutableMap.builder().build() 没有选择正确的类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9058430/

相关文章:

java - 检查 String 是否包含与 Java 中给定字符不同的字符

java - 运行失败 java.util.NoSuchElementException

java - 自定义TextInputLayout的错误背景颜色

java - 如何保持固定大小的 ListenableFuture 池?

java - 使用 Guava 将 map 转换为对象?

java - Guava 是否为身份平等提供 Predicates.is(T) (a la Predicates.equalTo(T t))?

java - Birt表动态格式化单元格

java - 使用 eclipselink 时将 persistence.xml 放在哪里?

java - 同时从 StdIn 读取数据并写入 StdOut 是否安全?

java - Trie 节省空间,但如何?