当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

诊断Java代码: Broken Dispatch错误情势[Java编程]

赞助商链接



  本文“诊断Java代码: Broken Dispatch错误情势[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

整体和部份

还记得这条谚语吗,“整体大于部份之和”?假如把一个个独立的事件组合成一个彼此作用的整体,产生的后果会比单个个体的作用之和要大得多.

程序也是一样的原理.随着一个个新办法被增添到程序中,整个程序大概的掌握流程疾速增添.关于大型程序而言,很快局面就会无法掌握了.就象是一个荒诞而又难以想象的戏法,有时您得到的终究后果并非您所盼望的方向 ― 这同您在重载办法大概覆盖办法时碰到的情形有些近似.

Broken Dispatch 错误情势

面向对象语言的最强盛的特点之一就是担当多态性.这一特点答应我们按照参数范例重载和覆盖办法.但是,象别的功效强盛的工具一样,这个特点也会引入新的危险.

固然 Java 程序员们很快就可以学会管理一次调用中将调用哪个办法的法则,但在大型程序中却很简单呈现这种情形:在一个类中重载了一个办法,后果倒是从前在另一个类中可以运行的代码被中止了.这样的错误正符合我所说的 Broken Dispatch 情势.

该情势可以描写以下:

传送给某个重载办法,比方 foo 的参数,却被传给了另一个办法,比方 goo ,它支持更遍及的参数范例.

goo 然后通过这些参数调用 foo .

但是由于 goo 内的这些参数的静态范例更为遍及,因此,大概会调用办法 foo 的错误版本.

象这样的错误很难诊断,因为大概只是增添了新的办法(而不是改正现有的办法)就引入了错误.并且,在发现问题之前,程序大概会持续履行相当长的一段时间.

症状

为了阐明这种情势的本质,让我们来看看下面这段示例代码,它是为实现我前面的文章“ 空标志错误情势”中的不可变列表而编写的.

清单 1. 实现不可变列表

interface List {
  public Object getFirst();
  public List getRest();
}
class Empty implements List {
  public Object getFirst() { throw new NoSuchElementException(); }
  public List getRest() { throw new NoSuchElementException(); }
  public boolean equals(Object that) {
   return this.getClass() == that.getClass();
  }
}
class Cons implements List {
 
  Object first;
  List rest;
 
  Cons(Object _first) {
   this.first = _first;
   this.rest = new Empty();
  }
  Cons(Object _first, List _rest) {
   this.first = _first;
   this.rest = _rest;
  }
  public Object getFirst() { return this.first; }
  public List getRest() { return this.rest; }
  ...
}


  以上是“诊断Java代码: Broken Dispatch错误情势[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 诊断Java代码 - 筹划"可测试的"操纵程序
  • <b>诊断Java代码: 臆想实现错误情势,第2部份</b>
  • 诊断Java代码: 筹划可扩大的操纵程序,第2部份
  • 诊断Java代码::Split Cleaner错误情势
  • 诊断Java代码: Fictitious Implementation错误情势,第1部份
  • 诊断Java代码:筹划可扩大的操纵程序,第1部份
  • 诊断Java代码:孤线程(Orphaned Thread)错误情势
  • 诊断Java代码
  • 诊断Java代码: 单元测试与自动化代码解析协同工作
  • 诊断Java代码: Repl供应交互式评价
  • 诊断Java代码: Liar View错误情势
  • 诊断Java代码: Java编程中的断言和时态逻辑
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .