java泛型方法调用转换错误
我有一段代码用于生成图表:java泛型方法调用转换错误,java,list,generics,hashmap,type-conversion,Java,List,Generics,Hashmap,Type Conversion,我有一段代码用于生成图表: HashMap<String, List<Ticket>> openedTicketsPerTeam = getOpenedTicketsPerTeam(); HashMap openedTicketsPerTeam=getOpenedTicketsPerTeam(); 我应该如何编写泛型方法的签名来计算列表的长度,每个映射元素? 我的想法是: Map<String, Integer> getNumOfValuesPerKey(
HashMap<String, List<Ticket>> openedTicketsPerTeam = getOpenedTicketsPerTeam();
HashMap openedTicketsPerTeam=getOpenedTicketsPerTeam();
我应该如何编写泛型方法的签名来计算列表的长度,每个映射元素?
我的想法是:
Map<String, Integer> getNumOfValuesPerKey(HashMap<String, List<? extends Object>> map) {...}
Map getNumOfValuesPerKey(HashMap类似于这样的内容(可用于任何键K
和V
s的任何列表):
试试这个:
Map<String, Integer> numOfTicketsPerTeam = getNumOfValuesPerKey(openedTicketsPerTeam );
Map numOfTicketsPerTeam=getnumofaluesperkey(openedTicketsPerTeam);
您的方法(正确)返回Map
,但您正在将其分配给HashMap
——有多种类型的Map,编译器无法知道您的实现返回了HsshMap
请注意,您可以而且应该将方法签名简化为:
Map<String, Integer> getNumOfValuesPerKey(Map<String, List<?>> map) {...}
Map getNumOfValuesPerKey(Map实际上不需要对值类型进行参数化。您在Map
中遇到的问题与List
不匹配。正确的做法是将其也设为通配符(另外还有一个好处,就是能够将类(例如ArrayList
作为参数)实现):
public静态映射getNumOfValuesPerKey(映射>条目:Map.entrySet())
count.put(entry.getKey(),entry.getValue().size());
返回计数;
}
您可以发布错误吗?
public static void main(String[] args) {
HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();
map.put("Hello", Arrays.asList(1,2,3));
map.put("World", Arrays.asList(4,5));
System.out.println(getNumOfValuesPerKey(map));
}
{Hello=3, World=2}
Map<String, Integer> numOfTicketsPerTeam = getNumOfValuesPerKey(openedTicketsPerTeam );
Map<String, Integer> getNumOfValuesPerKey(Map<String, List<?>> map) {...}
public static <K> Map<K, Integer> getNumOfValuesPerKey(Map<K, ? extends List<?>> map) {
Map<K, Integer> count = new HashMap<K, Integer>();
for (Map.Entry<K, ? extends List<?>> entry : map.entrySet())
count.put(entry.getKey(), entry.getValue().size());
return count;
}