我对 Java(7) 的行为有点困惑:
假设我有一个 Foo
的 ctor这需要 Map<String,String>
作为参数。以下代码:
new Foo(ImmutableMap.of());
产生错误错误:
java: no suitable constructor found for Foo(com.google.common.collect.ImmutableMap) constructor Foo(java.util.Map) is not applicable
尝试转换为 Map<String, String>
明确地不起作用,因为编译器提示类型不可转换。然而,这工作得很好:
Map<String, String> map = ImmutableMap.of();
new Foo(map);
这到底是怎么回事?为什么编译器对待局部变量的方式与对待函数参数的方式完全不同?
最佳答案
Java 编译器似乎无法从构造函数签名中推断出泛型类型并回退到已删除的类型(相当于 Map<Object, Object>
。)
使用:
new Foo(ImmutableMap.<String, String> of());
关于java - 将通用集合转换为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26354388/