问题描述
有这样的一段代码:List<Map> list1 = null;List<Map<String, String>> list2 = null;list1 = (List<Map>)list2;在eclipse3.3.2是可以编译通过的,但是有警告:Multiple markers at this line- Map is a raw type. References to generic type Map<K,V> should be parameterized- Type safety: Unchecked cast from List<Map<String,String>> to List<Map>但是这段代码在eclipse3.4.2和eclipse3.5.2是不能通过编译的,错误信息是:Cannot cast from List<Map<String,String>> to List<Map>我的项目之前是使用myeclipse6.5(eclipse3.3.2)开发的,后来想用flashBuilder4(eclipse3.4.2)打开这个项目,但是里面有些类似上面的代码在eclipse3.4.2里面无法通过编译,现在不知道怎么办,请大侠 指点迷津 问题补充:huzhenyu 写道
解决方案
只能说eclipse3.3编译时可能有自己的一套编译,所以能成功。最终通用的验证手段,个人觉得还得依赖于jdk的命令行。List<Map> list1 = null;List<Map<String, String>> list2 = null;list1 = (List<Map>)list2; 其实,你将第三行改改,就能都编译了list1 = (List<Map>)(Object)list2;
解决方案二:
支持 programming 和 iihero的观点,确实是这样的你这几句代码 javac是不能编译通过的。你可以通过以下方式测试下,1、检测你的项目的buildpath设置 查看Jre lib的设置2、检查eclipse的java的Installed Jre设置
解决方案三:
手上没有相应的Eclipse版本.看上去应该只是相应的设置不一样:工程-->右键属性-->Java Compiler-->Errors/Warnings-->Generic Types--3.3是设置为警告了,而较新版本是错误.故此.3.3的第一个警告是说List<Map>,中的Map应该像 list2的定义一样,Map指定k/v的类型.第二个警告是说会潜在一个castexception的可能.---------最好的办法还是修改代码.有明确的类型.
解决方案四:
List<Map<String, String>> list2 = null; list2的值为null你使用的是只引用在编译的时候是无法通过的改为List<Map<String, String>> list2 = new ArrayList<Map<String, String>>();
解决方案五:
我觉得是原因是: 1 清理一下项目,重新在eclispe project-build一下,之前能通过,有可能是你的eclipse建了,用户jar ,外部jar 在classpath中,。 2 你要看一下你设置项目的编译的jdk版本是不是正确的,选中工程,右键preferences----java----Compiler 选中你要的版本,
解决方案六:
我再补充一下,据说1、eclipse编译使用自己的编译器,主要使用如下jar包eclipsepluginsorg.eclipse.jdt.core_xxxxx.jar你的两个版本的eclipse的这个包及其相关包可能版本不同2、以下为个人观点:你的这个代码在javac是编译不通过的之所以在某个版本的eclipse下通过了,是因为该版本eclipse编译器帮你进行了某些改动
解决方案七:
和Eclipse的版本关系应该不大,关键还是JDK的版本.你把那代码单独拿出来写个类,用javac编译看看
解决方案八:
那你clear一下吧。
解决方案九:
你到 eclipse里面jdk设置里面看看它的编译的jdk设置是否相同?eclipse的编译是和这个设置有关的。
解决方案十:
到Eclipse的window/perferences/java/installed jres/菜单下看一下JRE的情况,看看勾选的对不对,最好指定一下你的JRE 1.6,应该就会好了
解决方案十一:
你这行代码有问题啊List<Map> list1 = null; List<Map<String, String>> list2 = null; list1 = (List<Map>)list2; 1.第一行代码 Map中的没有类型2.第二行代码Map中的类型是String3.两个list结合对比肯定会错了总之:集合中的类型不匹配。应该改为如下:List<Map<String, String>> list1 = null; List<Map<String, String>> list2 = null; list1 = (List<Map<String, String>>)list2;
解决方案十二:
引用list1 = (List<Map>)list2; 这句强转有问题啊,list2不是List<Map>类型,Map<String, String>是不可以强转成Map的.List<?> list1 = null;List<Map<String, String>> list2 = null;list1 = list2;
解决方案十三:
eclipse默认是自己的jdk,3.2应该是1.5, 3.4应该是1.6的jdk,因此提示报错参考sheep3600答案
解决方案十四:
绝对是eclipse配置的编译器版本问题,你装的jdk1.6,并不代表你编译的时候就用的jdk1.6,尤其是在用IDE工具的时候。告诉你配置在哪里,你自己去看看windows----preferences----java----Compiler你现在应该能看到了吧。
解决方案十五:
eclipse编译使用自己的编译器,并不同于jdk中的javac所以猜测你用的那几个版本的eclipse的编译器并不相同关于转型只有将父类转化成子类才可以转型比如Object a = null;String b = (String) a;如下是不可以的List a = null;String b = (String) a;List<Map>并不是List<Map<String, String>>的父类,故不可以转型可以改成List list1 = null; 或List<?> list1 = null;
解决方案:
同意楼上的,应该是eclipse配置的jdk版本问题
解决方案:
3.3与3.4,3.5使用的编译器一样吗?jdk1.5与jdk1.6的编译器还是些许差异的.可能就是你提到的.eclipse提示的信息也能通过jdk的编译器来关联的,所以应该跟eclipse的版本不存在必然的关联(本人推测).