java强制类型转换的风险及原理讨论

music_mouse 2011-12-12 04:28:20
小弟一直对java中的强制类型转换心存疑虑,关于它的原理方面的东西,也希望有能力者聊聊。
平时开发的时候,我特别注意了这样一点:
简单类型的数据强制转换时,编译器一般不会给出警告提示:
Object o = new Object();
String s = (String)o;//没有warn 提示
(Map<String,List<Object>>)SessionPool.getClient().get(MemoryData.HOTEST_DPI_APPS_ID_LIST_MAP_KEY))//有异常提示

所以关于这块的原理,我就不明白了。请指教!
...全文
551 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
eatgrass 2011-12-28
  • 打赏
  • 举报
回复
引用Effective Java中的非常有价值的建议
...
优先考虑泛型和泛型方法
List优先与数组
...
music_mouse 2011-12-28
  • 打赏
  • 举报
回复
顶起,还有其他的看法吗?
dracularking 2011-12-13
  • 打赏
  • 举报
回复
从具体到抽象或者说从小范围到大范围,安全
从抽象到具体或者说从大范围到小范围,风险

之所以只是风险,是java中抽象(大范围)类型的外表下藏匿着具体(小范围)类型的内在,未知。

还有就是上面提到的编译期无转型风险提示是因为在编译期无法知道运行期变量具体类型
beiouwolf 2011-12-13
  • 打赏
  • 举报
回复
ClassCastException是一个runtimeException ide不会提示
至于类转型的问题...这个自己翻书吧...基础很重要的...
泛型的转型和类无关,提示的警告是不明确的泛型对象,因为泛型不存在于运行期,存在你转出的泛型可能和实际类型不同
龙四 2011-12-13
  • 打赏
  • 举报
回复
(Map<String,List<Object>>)SessionPool.getClient().get(MemoryData.HOTEST_DPI_APPS_ID_LIST_MAP_KEY))//有异常提示


是因为泛型的缘故,不然也不会提示
huangxw000 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dyllove98 的回复:]
子转化成父没有问题
父转化成子有风险
[/Quote]
+1
Jlins 2011-12-12
  • 打赏
  • 举报
回复
子转化成父没有问题
父转化成子有风险

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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