小编Kev*_*vin的帖子

带有ArrayList通配符的Java HashMap

我有一个HashMap,其值是ArrayLists,我正在尝试编写一个函数来接受这些HashMaps的泛型实例

HashMap<String, ArrayList<Integer>> myMap = new HashMap<String, ArrayList<Integer>>();
public static void foo(HashMap<?, ArrayList<?>> a) {}
public static void bar(HashMap<?, ? extends ArrayList<?>> a) {}

// Compilation Failure!
foo(myMap);

// This works, but why do I need ? extends ArrayList
bar(myMap)
Run Code Online (Sandbox Code Playgroud)

错误消息是

foo(HashMap<?,ArrayList<?>>)类型中的方法Example不适用于arguments(HashMap<String,ArrayList<Integer>>).

为什么我需要为extends ArrayList使用通配符?

我认为通过拥有ArrayList<?>(没有? extends),我可以将函数限制为仅具有ArrayList值的HashMaps.

我也知道以下通用方法有效:

public static <K,V> void printer(HashMap<K, ArrayList<V>> list) { }
Run Code Online (Sandbox Code Playgroud)

这表现我的想法ArrayList<?>会起作用.有人能解释这里的细微之处吗?

java generics wildcard arraylist hashmap

4
推荐指数
1
解决办法
3869
查看次数

标签 统计

arraylist ×1

generics ×1

hashmap ×1

java ×1

wildcard ×1