容器的缺点:未知类型

 

使用java容器有个缺点,在将对象加入容器的时候就丢失了类型信息。因为容器类的程序设计人员不关系你想要添加入容器的对象的具体类型。如果容器只能保存你自己的类型,就失去了作为通用工具的意义。所以容器只保存对Object的引用,Object是所有类的基类,因此容器可以保存任何类型的对象。这是了不起的解决方式,不过也有两个缺点。

(1)因为在将对象的引用加入容器的时候就丢失了类型的信息,所以对于填入容器的对象没有类型的限制,及时可以保持容器的类型,例如“猫”的容器,别人还是可以轻易的将“狗” 放入容器。

例如 :

List cats = new ArrayList(); 
  for(int i = 0 ; i<7 ; i++)
  {
   cats.add(new cat(i));      //cat加入容器后,类型丢失
  }
  cats.add(new dog(7));   //不能阻止“狗”放入容器

(2)因为丢失了类型信息,所以容器只知道它保存的是指向对象的引用。在使用容器的元素前必须要做好类型转换,转换为正确类型。

例如:

List cats = new ArrayList();
  for(int i = 0 ; i<7 ; i++)
  {
   cats.add(new cat(i));                    //cat加入容器后,类型丢失
  }
  for(int i = 0; i<cats.size(); i++)
   (cats.get(i)).id();                              //必须转换为正确的类型      

综合举例:

 

import  java.util. * ;
public   class  catsanddogs
{
    
public static void main(String args[])
    
{
        List cats 
= new ArrayList();
        
for(int i = 0 ; i<7 ; i++)
        
{
            cats.add(
new cat(i));
        }

        cats.add(
new dog(7));      //把dog类加入list并不是一个问题
        for(int i = 0; i<cats.size(); i++)
            (cat)(cats.get(i)).id();   
//dog 在运行时会错误,因为不是正确的转换
    }

}
;

 

以上在编译时,不会有错误,但是在运行时,发生转换错误。

运行情况:

D:/temp>java catsanddogs
cat # 0
cat # 1
cat # 2
cat # 3
cat # 4
cat # 5
cat # 6
Exception in thread "main" java.lang.ClassCastException: dog cannot be cast to c
at
        at catsanddogs.main(catsanddogs.java:15)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值