java - 将通用集合转换为函数参数

标签 java generics casting

我对 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/

相关文章:

java - 在 1 行上动态加载 5 个按钮

java - 如何使用泛型限制接受某些用户定义的类对象的方法?

java - 如何在给定集合名称(ArrayList、LinkedList 等)和集合中的项目的情况下创建任何集合?

c++ - 什么时候需要显式指针类型转换?

java - 由于服务器关闭套接字而导致写入失败时,Netty 无法从服务器读取字节

java - Java中多重继承相关的混淆

java - Java 中通配符泛型有什么好处?

C# 转换问题 : from IEnumerable to custom type

c++ - 在 C++ 中 0x88 文字会转换成什么?

java - 动态创建字段java