欢迎光临
我们一直在努力

Java中鲜为人知的缺点(中)-JSP教程,资料/其它

建站超值云服务器,限时71元/月

无法生成通用类

  在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类中的代码。取值时必须进行类型转换(点击放大)

 

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » Java中鲜为人知的缺点(中)-JSP教程,资料/其它
分享到: 更多 (0)

相关推荐

  • 暂无文章