使用范类型的时候,为什么会报“unchecked cast”的警告。

nitiyoubi2k 2008-01-16 05:29:19
最早的代码是这样的。
Map mInfo = (Map)tempSession.get("mInfo");
在JDK1.5下有警告,说不能用raw type 应该用 generic type

后来代码改成
Map<String,Object> mInfo = (Map<String,Object>)tempSession.get("mInfo");
结果还是有警告:Uchecked cast from Object to Map

请问怎么改才能没有警告出现啊?客户要求没有警告,也不能屏蔽警告。
...全文
2562 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
spiritOne 2010-07-16
  • 打赏
  • 举报
回复
很简单,你只要把这个泛型封装到一个类里面,作为一个类的属性就可以了。SESSION里面放这个类的对象,通过这个对象取得这个泛型对象。只是多了一步操作罢了。如:
class A{
public List<String> l;
public A(List<String> l){
this.l = l;
}
}
这时,你再如下处理就不会有警告了

List<String> myList = new ArrayList<String>();
A test = new A(myList);
request.getSession().setAttribute("test", test);

A test1 = (A)request.getSession().getAttribute("test");
List<String> myList2 = test1.l;
这样警告信息就被拿掉了。
cangyue87 2008-01-18
  • 打赏
  • 举报
回复
楼主你放心的搞吧,我不相信你那客户真能不屏蔽的处理这个警告....

老竹子的办法很H很BL,特别是当你那jar包混在一大堆普通包里的时候.
老紫竹 2008-01-17
  • 打赏
  • 举报
回复
这么讲吧! request,session 都是不支持泛型的,里面拿出来的都是 Object, 你必须强制转换,而任何非泛型转化为泛型,都会有警告!
这是泛型的优点,而不是缺点。
nitiyoubi2k 2008-01-17
  • 打赏
  • 举报
回复
客户肯定是懂java的,但是水平大概比我好不了多少,1.5的JDK估计还没搞过,所以让我们这里先调查,如果确实无法去掉的话,直接跟他说无法实现就行了,就怕我这里没搞出来,客户那边搞好了,这就麻烦了。
老紫竹 2008-01-17
  • 打赏
  • 举报
回复
说点有用的吧!

客户要求没有警告是正常的,我如果不懂,我也不允许开发商交付的程序有n多个警告信息。

如果你的客户是IT人士,熟悉JAVA,他不会提出这个要求,因为那是语言特性。
既然他不熟悉,骗他还不简单吗!

你把有关的东西封装成一个.jar包,专门来屏蔽这种警告的,然后你就说这是一个网上的一个常用工具包就行了,不告诉他,他也不知道。
反正他也不懂。


内行骗外行还不简单。
nitiyoubi2k 2008-01-17
  • 打赏
  • 举报
回复
建议重写 tempSession.get("mInfo");
========================================
从session里拿对象总会发生类型转换的问题。如何重写呢,就算用Hashtable等,都没发避免类型转换啊.
老紫竹 2008-01-17
  • 打赏
  • 举报
回复
简单,换JDK 1.4啦!

如果客户不允许,那就和客户一起,状告SUN,就OK了! 谁让他弄了这么XX的东西,害得我们做不成生意! 告他!

我精神上支持你和你的客户,申请法院判距SUN取消1.5的泛型警告,同时取消你们客户不满意的所有特性!


nitiyoubi2k 2008-01-17
  • 打赏
  • 举报
回复
客户要求没有警告,也不能屏蔽警告。
---------------------------------

这客户也太抽了吧.....
=========================
是客户给我们钱,不是我们给客户钱,所以客户乃我等衣食父母。
yuanqingfei 2008-01-17
  • 打赏
  • 举报
回复
建议重写 tempSession.get("mInfo");
DiligencyMan 2008-01-17
  • 打赏
  • 举报
回复
jdk1.6可以避免这个
cangyue87 2008-01-17
  • 打赏
  • 举报
回复
客户要求没有警告,也不能屏蔽警告。
---------------------------------

这客户也太抽了吧.....
c2one 2008-01-17
  • 打赏
  • 举报
回复
jdk1.5以上在方法前加入标注@SuppressWarnings(value = {"unchecked"})则警告消去
nitiyoubi2k 2008-01-17
  • 打赏
  • 举报
回复
以前程序中的警告都是指不太规范的写法,可以通过修改程序来去掉警告的,
1.5以后难道程序里必须有警告吗?无论如何改都没法去掉警告吗?
syhan 2008-01-16
  • 打赏
  • 举报
回复
get地返回值就是object,只能直接cast了
老紫竹 2008-01-16
  • 打赏
  • 举报
回复
没有任何办法,机理如此!
其实你可以想一下, 为了通用,你指定Object都可以存入
那个你怎么保证取出来的肯定是Map<String,Object>呢? 这个警告正好是一个提示。我认为需要!
nitiyoubi2k 2008-01-16
  • 打赏
  • 举报
回复
楼上的,是不是说没办法解决警告问题吗?(不屏蔽警告,不指定1.4版本)
老紫竹 2008-01-16
  • 打赏
  • 举报
回复
1 1.5 就是这样,他默认需要你指定Map的内部对象类型,所以第一个有警告
2 session.get(); 肯定返回Object类型,这个是没有泛型的,你把它强制转化为带泛型的,也会警告你,转化可能有问题。


nitiyoubi2k 2008-01-16
  • 打赏
  • 举报
回复
tempSession是什么类型啊?
=====================
HttpSession
healer_kx 2008-01-16
  • 打赏
  • 举报
回复
tempSession是什么类型啊?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧