一段代码在eclipse3.3.2可以编译,但在eclipse3.4.2不行

问题描述

有这样的一段代码: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的版本不存在必然的关联(本人推测).

时间: 2024-09-18 02:22:03

一段代码在eclipse3.3.2可以编译,但在eclipse3.4.2不行的相关文章

c++-这段代码怎么改,才能运行(main的第一行要保留)

问题描述 这段代码怎么改,才能运行(main的第一行要保留) #include using namespace std; class student { public: student(int n,float s):num(n),score(s){} void change(int n,float s){num=n;score=s;} void display(){cout<<num<<" "<<score<<endl;} private

孙鑫-Visual C++的一段代码搞不懂求解释

问题描述 Visual C++的一段代码搞不懂求解释 说一下自己的理解.题目是孙鑫老是的文本输出的例子. 1:GetBkColor得到背景白色,然后SetTextColor(白色)把背景白色设置为文字颜色.跟着clr应该是赋值得到白色了吧,但是F5看的时候是黑色,就要原文字颜色.我这么理解应该错了 1 COLORREF clr=dc.SetTextColor(dc.GetBkColor()); //GetBkColor属于dc对象,改变dc中的背景值(白色).然后SetTextColor用白色值

android-贴一段代码,关于自动接听的,请老司机帮帮忙

问题描述 贴一段代码,关于自动接听的,请老司机帮帮忙 public synchronized void answerRingingCall(Context context) { try { Log.e("try to answer", "below 2.3"); //ITelephony itelephony = getITelephony(mTelephonyManager); Method method = Class.forName("android

编译错误-出现了fatal exception :main 这是其中的一段代码,大家看看有什么问题

问题描述 出现了fatal exception :main 这是其中的一段代码,大家看看有什么问题 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginBtn = (Button)findViewById(R.id.login_btn_login); registerBtn = (Butt

求助servlet 这段代码什么意思

问题描述 求助servlet 这段代码什么意思 */ @RequestMapping("/getTile.do") public @ResponseBody String getTile(HttpServletResponse response, @RequestParam(value = "map_id", required = true) String mapId, @RequestParam(required = true) int level, @Reque

ancy orm-用FancyForm添加用户角色,求解释这段代码,

问题描述 用FancyForm添加用户角色,求解释这段代码, var form = $('#form').FancyForm({ title: '添加角色' width: 345 height: 325 inputWidth: 190 labelWidth: 60 url: '<%=path %>/sysRoleController/addRole.do' params: { param1: 1 param2:'string' } defaults: { type: 'string' } it

C++课程设计老师说我没有用到类 求指教这段代码要怎么修改加上类

问题描述 C++课程设计老师说我没有用到类 求指教这段代码要怎么修改加上类 #include #include #include using namespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node//为了处理符号而建立的链表(如: 1+(-2)) { char data; node *next; }node; t

ip地址-求解释下这段代码...感激不尽

问题描述 求解释下这段代码...感激不尽 u_long ulDestIP; u_long ulDestIP1=inet_addr(a); u_long ulDestIP2=inet_addr(b); unsigned long count = ntohl(ulDestIP2 - ulDestIP1)-1; struct in_addr in; unsigned long hostip; for(unsigned int i = 0; i <=count+1; i++) { hostip = nt

new-link这段代码的含义是什么?看不懂

问题描述 link这段代码的含义是什么?看不懂 var query = data.Select((x, r) =>x.Select((v, c) => new { r, c, v })); var result = query.GroupBy(x => x.c).Select(x => x.Select(y => y.v).OrderBy(x => x.r).ToArray()).ToArray(); 解决方案 我的代码? var query = data.Select