ela*_*dan 3 java generics casting
我对Java的(7)行为感到有些困惑:
假设我有一个ctor,Foo它需要Map<String,String>一个参数.以下代码:
new Foo(ImmutableMap.of());
Run Code Online (Sandbox Code Playgroud)
产生错误错误:
java:找不到适合Foo(com.google.common.collect.ImmutableMap)构造函数的构造函数Foo(java.util.Map)不适用
尝试强制转换为Map<String, String>显式不起作用,因为编译器抱怨类型不可转换.但是,这很好用:
Map<String, String> map = ImmutableMap.of();
new Foo(map);
Run Code Online (Sandbox Code Playgroud)
到底发生了什么事?为什么编译器对待局部变量的方式与函数参数不同?
Java编译器似乎无法从构造函数签名中推断出泛型类型,而是回退到擦除类型(相当于Map<Object, Object>.)
使用:
new Foo(ImmutableMap.<String, String> of());
Run Code Online (Sandbox Code Playgroud)