Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java泛型方法调用转换错误_Java_List_Generics_Hashmap_Type Conversion - Fatal编程技术网

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;
}