我已阅读有关Java集合的Beautiful code with Google Collections, Guava and static imports文章,以下片段引起了我的注意:
Map<String, Map<Long, List<String>>> map = Maps.newHashMap();
问题是,我不明白newHashMap
方法可能如何返回Map<String,Map<Long, List<String>>>
。他们是怎么写这段代码的?什么时候成为可能?我的印象是你需要在构造函数调用中显式声明泛型参数。
答案 0 :(得分:6)
您可以在方法调用上声明泛型参数,而不仅仅是整个类。如果你看一下该方法的来源:
public static <K, V> HashMap<K, V> newHashMap() {
return new HashMap<K, V>();
}
你会看到它声明了两个通用参数K和V,并将结果声明为Map。编译器足够聪明,可以从LHS表达式中找出K和V.在您的情况下,K为String
,V为Map<Long, List<String>>
答案 1 :(得分:1)
看看来源。所有这个方法都提供了一个很好的捷径:
public static <K, V> HashMap<K, V> newHashMap() {
return new HashMap<K, V>();
}
这适用于任何参数,因为HashMap本身是通用的。