日期:2014-05-20  浏览次数:20722 次

Java细节问题

List<String> testList = new ArrayList<String>();
Map<String, String> testMap = new HashMap<String, String>();
List<Map<String,String>> listData = new ArrayList<HashMap<String,String>>();

求问大神,1、2行都没问题,为啥第三行会有报错?
不能这么用么?
------解决方案--------------------
引用:
Quote: 引用:

你应该可以看到IDE给的提示了吧:
Type mismatch: cannot convert from ArrayList<HashMap<String,String>> to List<Map<String,String>>
泛型要一致,要么前面的改成HashMap,要么后面的改成Map。

错误提示我也看了,就是有点诧异,Java为什么会不支持这么写,按照父类引用可以指向子类实例的说法,这么写应该是没问题的

父类引用指向子类实例没错,但是你的第三句中
List<Map<String,String>> listData = new ArrayList<HashMap<String,String>>();

new ArrayList是实例,但是HashMap<String, String>却不是实例,它只是一种类型,所以报错
------解决方案--------------------
引用:
Quote: 引用:

你应该可以看到IDE给的提示了吧:
Type mismatch: cannot convert from ArrayList<HashMap<String,String>> to List<Map<String,String>>
泛型要一致,要么前面的改成HashMap,要么后面的改成Map。

错误提示我也看了,就是有点诧异,Java为什么会不支持这么写,按照父类引用可以指向子类实例的说法,这么写应该是没问题的

父类引用可以指向子类实例是Java的多态性,这和泛型没有关系。泛型就是说要提前定义好你这个集合的类型,你前面是Map后面就要一致。具体查一下泛型的基础规则和用法。