• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

Java中鲜为人知的缺点(中)

发布: 2007-7-01 18:47 | 作者: admin | 来源: | 查看: 13次 | 进入软件测试论坛讨论

领测软件测试网 无法生成通用类

  在Java中无法生成适用于各种Class(类)的通用类。具有C++编程经验的人员对此尤其感觉不便。

图4●模板的功能。如果是符合条件的类型,无论是Class(类)型还是数值型均可使用模板类(template class)的功能。(点击放大)


  C++利用被称为模板(参数化类型)的功能实现这一点(图4)。生成类和函数时,不需使用特定的类,而使用包含类的模板描述处理过程(注1)。就是说只要具有在模板中调用的方法和运算符,无论何种类型的对象都可以使用模板(LIST 4)。

down cast(向下强制类型转换)难以理解,而且危险

  不能使用模板的语言在编程时就会经常受到数据类型的制约。下面以Java为例,对此加以说明。对象保存在(上)篇中提到的Vector类中(LIST 5(点击放大显示))。

  首先,生成String类的对象,并将其追加到Vector类中。然后提取Vector类中的初始要素。此时明确地利用String类对该方法的返回值进行类型转换(cast)。如果没有这种类型转换,编译时就会产生错误。因为暂时保存在Vector类中的对象只能处理成对象型。

  追加这种类型转换从2个角度来讲是不合理的。很清楚在Vector类中的要素中本来就只有"类型"的信息。而编程者则必须一个一个重新进行类型转换。由于需要进行多余的描述,因此代码就会无谓地增加。

  另一个问题是,这种操作实际上隐藏着一定的危险。在LIST 5中,将由Vector类中取得的对象定为String类型后进行了类型转换。这种转换并非永远都适用。假如在这个Vector类中由外部追加了类型完全不同的(也并非是指继承了String类)对象,由于类型不一致,因此不仅无法进行类型转换,还会发生错误。

  如上所述,down cast(向下强制类型转换)就是指将位于继承关系中上层的类(这里指Object类)转换成其派生的类(这里指String类)。由于down cast伴随着这种危险,因此在编程时就应该尽量予以避免。但是,在使用像Vector类这样的Collection类时这种转换就将无法避免。

  Java的这种缺点据称不久将得到解决。负责修订Java语言规格的的JCP组织(Java Community Process)计划在Java中导入类似于C++模板的Generics。具体的时间并不明确,但估计在Java 2 SDK 1.5以后导入。(记者:大森 敏行、八木 玲子)

[TR][TD]LIST 4●C++中部分模板代码。为了将各种类型总称起来,使用了名为T的变量。如果有需要将其值加倍的类,就在T部分中指定类名来生成模板类。不过这种模板只能由具有运算符的类来使用。如果其他类使用这种模板,就会产生编译错误(点击放大)


[TR][TD][TR][TD]LIST 5●Java中将字符串对象的数据保存到Vector类中的代码。取值时必须进行类型转换(点击放大)
 

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网