此代码在Java 8中编译,但无法在Java 7中编译:
class Map<K,V> {
static <K,V> Map<K,V> empty() {return null;}
Map<K,V> put(K k, V v) {return null;}
V get(K k) {return null;}
}
class A {
static void f(Map<Integer,String> m){}
public static void main(String[] args) {
f(Map.empty());
}
}
Run Code Online (Sandbox Code Playgroud)
它不会推断出Map返回的具体类型Map.empty():
$ javac7 A.java
A.java:10: error: method f in class A cannot be applied to given types;
f(Map.empty());
^
required: Map<Integer,String>
found: Map<Object,Object>
reason: actual argument Map<Object,Object> cannot be converted to Map<Integer,String> by method invocation …Run Code Online (Sandbox Code Playgroud) 我需要初始化一个ImmutableMap(番石榴21.0),我需要它来解析一个Map>对于这个例子,我将只使用String.
所以我有:
import com.google.common.collect.ImmutableMap;
public class MyClass {
private Map<String,String> testMap =
ImmutableMap<String,String>.builder().put("a","b").build();
Run Code Online (Sandbox Code Playgroud)
在最后一行,我得到了大量的编译器错误.使用ImmutableMap<String,String>.of()得到相同的结果.
如果我删除我只是得到一个错误,类型不匹配.
当我想要一个具有显式类型的地图时,如何使用ImmutableMap进行显式(类文字)初始化?