2011-10-18 83 views
4

选中的Java运行我很奇怪,为什么下面的问题我要讲一个不安全/未检查操作警告:转换为普通

Map<String, ProxySession> sessionMap = (Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute"); 

是投错了吗?我无法理解我在这里错过了什么。

P.S.我不想摆脱警告,我想了解不安全的操作。

谢谢!

+0

http://stackoverflow.com/questions/262367/type-safety-unchecked-cast http://stackoverflow.com/questions/509076/how-do-i-address-unchecked- cast-warnings http://stackoverflow.com/questions/2592642/type-safety-unchecked-cast-from-object –

回答

6

这意味着演员将检查返回的对象是某种Map,但由于类型擦除,它将无法检查有关其内容的任何内容。在执行时,地图是地图...所以如果有人将Map<Integer, String>放入会话中,那么该行代码仍然会成功。您尝试使用其中一个条目时只会遇到错误,例如通过迭代条目并获取键和值。

欢迎Java泛型:(

1

这是一个未经检查的演员。你作为一个程序员可能知道se.getSession()预期是准确的类型,与<String, ProxySession>参数,让你的古怪世界正在做演员,但它可能不是确切类型(编译建议)既然你不编程检查,编译器会发出警告

也请参阅:How do I address unchecked cast warnings?

0

JVM没有按' t检查这样的模式 例如,(Map<String, ProxySession>) se.getSession().getServletContext().getAttribute("myattribute");将等于(Map) se.getSession().getServletContext().getAttribute("myattribute");