<b>诊断Java代码: Impostor Type错误情势</b>[Java编程]
本文“<b>诊断Java代码: Impostor Type错误情势</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
当利用字段中特别的标志来辨别对象范例时,大概会产生标志对相关数据误贴标签的错误 ― 通称为 Impostor Type 错误情势.在诊断 Java 代码的这一部份中,Eric Allen 对这个错误的症状和起因举行了解析,具体阐明了预防错误发生的办法,并谈论了一种吸惹人的混合实现办法,这种办法不利用 impostor type,但最后,还是有很多相同的缺陷产生.请在 谈论论坛与作者及其他读者分享您对本文的见解.
程序中除了最无关紧急的部份外都要对某些数据范例举行操作.静态范例系统供应了一种办法,它可以确保程序不会对给定范例的数据举行不当的操作.Java 语言的长处之一是严峻的辨别范例,所以在程序运行前已消除了范例错误.作为开辟人员,我们可以利用这个范例系统供应更结实且没有错误的代码.但是,我们却常常没有让范例系统施展出最大的潜力.
Impostor Type 错误情势
很多程序可以更多地利用静态范例系统,但它们没有这样做,而是依靠包含辨别数据范例标志的特别字段.
依靠这些特别字段辨别数据范例,这样的程序放弃了范例系统专门供应应它们的保护办法.当这些标志中的一个对它的数据误贴了标签,就会产生我称之为 Impostor Type的错误.
症状
impostor type 错误的一种常见症状是很多概念上差别范例的数据都被一样(并且错误)的方法处理.另一常见症状是数据与任何指定的范例都不匹配.
主要法则是,只要当概念上的数据范例和它被程序处理的办法不匹配,便可以猜疑能否发生了这个情势的错误.
为阐明引入这种情势的错误是多么的轻而易举,让我们来考虑一个简单的示例.假定我们需求处理各种各样的欧几里得多少学形状,如圆形、正方形等等.这些多少形状没有坐标,但含有一个 scale 变量,所以可以计算它们的面积.
清单 1. 用 imposter type 实现各种多少形状
public class Form {
String shape;
double scale;
public Form(String _shape, double _scale) {
this.shape = _shape;
this.scale = _scale;
}
public double getArea() {
if (shape.equals("square")) {
return scale * scale;
}
else if (shape.equals("circle")) {
return Math.PI * scale * scale;
}
else { // shape.equals("triangle"), an equilateral triangle
return scale * (scale * Math.sqrt(3) / 4);
}
}
}
以上是“<b>诊断Java代码: Impostor Type错误情势</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |