您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> js >> 正文

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

作者:作者:未…    信息学院来源:网络收集    点击数:    更新时间:2006-8-27 我要参与讨论

  无法生成通用类

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

http://china.nikkeibp.co.jp/china/img_data/030129java9.jpg 图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以后导入。(记者:大森 敏行、八木 玲子)

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

[TR][TD]http://china.nikkeibp.co.jp/china/img_data/030129java11.jpg [TR][TD]LIST 5●Java中将字符串对象的数据保存到Vector类中的代码。取值时必须进行类型转换(点击放大)  

在google里搜索更多Java中鲜为人知的缺点(中)

Google
Web www.51ec.org
  • 上一篇信息学院:

  • 下一篇信息学院:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    我来说两句 对此文章发表了评论
      昵 称: *必填    ·注册用户·
      评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
    评 论
    内 容

     
    评论列表 (最新 评论仅限网友观点!)

    推荐文章
  • 此栏目下没有推荐信息学院
  • 供求信息




    | 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明