我有一个HashMap其中的值的ArrayList,和我想要写一个函数来接受这些包含HashMap的一般情况Java的HashMap的ArrayList中与通配符
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)
的错误消息是
Example
类型的方法foo(HashMap<?,ArrayList<?>>)
不适用于参数 (HashMap<String,ArrayList<Integer>>
)。
为什么我需要扩展ArrayList的通配符?
我以为有ArrayList<?>
(没有? extends
),我可以限制函数只有HashMaps与ArrayList值。
我也知道,下面的一般方法的工作原理:
public static <K,V> void printer(HashMap<K, ArrayList<V>> list) { }
其行为我怎么想ArrayList<?>
会工作。有人能解释这里的微妙之处吗?
要么告诉我们'foo'生成的确切的编译器错误,或者给我们一个导致错误的'foo'里面的代码的例子。实际上,这两条信息都会有很大帮助 –
在我的机器上工作 –
'类型Example中的foo(HashMap , ArrayList >>)方法不适用于参数(HashMap>)' –