正确的语法是
return ImmutableMap. builder().putAll(map).build();
请注意,该点在泛型之前,因为泛型属于方法调用,而不是类.
正如Bozho所说,你需要在调用泛型方法时指定通用类型.有时,如果编译器可以推断它们,则不需要.但是类型推断是非常有限的,通常只适用于方法参数,例如对于copyOf方法:该方法是通用的,但编译器可以从method参数中推断出通用类型.
更新:Gabriel建议将语句分割成多行,如下所示:
Builder builder = ImmutableMap.builder();
builder.putAll(map);
return builder.build();
这避免了显式类型参数的需要,以换取新的局部变量,在这种情况下,IMHO不会增加可读性.另一方面,如果您多次添加到构建器,我更喜欢通过一个长的呼叫链的本地变量.在只有一个putAll调用的特殊情况下,copyOf会在单行中提供避免类型参数的好处.