java:在集合API中创建对象时出错

mca*_*ner 0 java collections generic-collections

我有三行代码:

1) List<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

这不会产生任何错误,
但是当我编写以下代码行时

2)Map<String, List<String>> map = new HashMap<String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)

我得到以下错误
类型不匹配:无法转换HashMap<String,ArrayList<String>> to Map<String,List<String>>

3)Map<String,String> d= new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)

此行不会产生任何错误

我想知道为什么
(2)行显示我错误.提前致谢.:)

jdi*_*tal 6

这是一个非正式的答案.使用此代码:

Map<String, List<String>> map = new HashMap<String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)

你最终得到map的价值可以是任何List<String>,这意味着你可以这样做:

map.put("test", new LinkedList<String>());
Run Code Online (Sandbox Code Playgroud)

这是不正确的,因为a LinkedList不是ArrayList.Java编译器正努力在编译时提供类型安全性,这就是它产生错误的原因.