微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > J2SE >

Java细节问题

时间:2014-04-14 19:52  浏览:努力统计中...
ListStringtestList=newArrayListString(); MapString,StringtestMap=newHashMapString,String(); ListMapString,StringlistData=newArrayListHashMapString,String(); 求问大神,1、2行都没问题,为啥第三行会有报错? 不能这么用么

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行都没问题,为啥第三行会有报错?
不能这么用么?

第三句该这么写List<HashMap<String,String>> listData = new ArrayList<HashMap<String,String>>();List中是什么类型的,你new的时候还能new别的类型?

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

我只是偶然发现第三句Eclipse会报错,贴出来只是想问个明白。第三句为什么错了?

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

原来是不一致


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

父类指向子类那是多态,这是泛型;


错误提示我也看了,就是有点诧异,Java为什么会不支持这么写,按照父类引用可以指向子类实例的说法,这么写应该是没问题的
父类引用指向子类实例没错,但是你的第三句中
List<Map<String,String>> listData = new ArrayList<HashMap<String,String>>();

new ArrayList是实例,但是HashMap<String, String>却不是实例,它只是一种类型,所以报错


错误提示我也看了,就是有点诧异,Java为什么会不支持这么写,按照父类引用可以指向子类实例的说法,这么写应该是没问题的
父类引用可以指向子类实例是Java的多态性,这和泛型没有关系。泛型就是说要提前定义好你这个集合的类型,你前面是Map后面就要一致。具体查一下泛型的基础规则和用法。
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------