导航栏菜单

[登录]

备案域名交易

老域名购买,已备案域名出售,已备案过期域名查询,老域名注册,已备案域名抢注,老域名转让,万网已备案域名,九江网站建设

« 上一篇下一篇 »

容器的缺点——不知道对象的类型

Java的容器有个缺点,就是往容器里面放入对象的时候,会把对象的类型信息给弄丢了。这是因为开发容器类的程序员不会知道你要用它来保存什么类型的对象,而让容器仅只保存特定类型的对象又会影响它的通用性。所以容器被做成只持有Object,也就是所有对象的根类的reference,这样它就能持有任何类型的对象了。

当然这不包括primitive,因为它们不是对象,也没有继承别的对象。这是一个很了不起的方案,只是:1、由于在将对象放入容器的时候,它的类型信息被扔掉了,所以容器对“能往里面加什么类型的对象”没有限制。比方说,即使你向让它只持有cat,别人也能很轻易地把dog放进去。2、由于对象的类型信息没有了,容器只知道它持有的Object的reference,所以对象在使用之前还必须进行类型转换。

好的一面是,Java不会让你误用放进容器里的对象。假设你往cat的容器里面扔了个dog,然后要把这个容器里的所有对象都当cat来用,当你把dog的reference从cat的容器里面拉出来,并且视图将它转换成cat的时候,就会引发一个RuntimeException。

两个不同的类,除了对象之外,它们没有什么相同之处。如果你不明确地说明这个类是继承谁的,那么它就自动继承Object。由于ArrayList持有的是Object,所以你可以用它来增加这两个不同的类。这么做在编译和运行的时候都不会报错。但是,当你用get方法把你认为是cat的对象取出来的时候,你得到的是一个要转换成cat的Object的reference。于是,在你能调用cat的类的方法之前,你还要用括号来做强制的类型转换,不然就是一个语法错误。

这还不只是麻烦,它还会制造一些很难发现的bug。假如程序在什么地方(或好几个地方)往容器里面插了对象,然后你发现,只要程序执行到了这个地方,就会有一个异常跑出来,告诉你容器里面有一个错误的对象,于是你就得把这个坏的插入点找出来。在绝大多数情况下,这不是什么问题,但是你还是应该对这种可能性保持警惕。

Powered By 备案域名交易 .Theme By 备案域名 Copyright www.jxpxw.com.cn. Some Rights Reserved.

最近发表
网站分类
搜索
Tags列表