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

诊断Java代码: Double Descent错误情势[Java编程]

赞助商链接



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

不要强迫转换这个类!

与可怕的 空指针非常(该非常除了报告空指针之外,关于将要发生的事情什么也不说)差别,类强迫转换非常相对来说简单调试.

类强迫转换常常发生在递归下行数据构造的程序中,普通是现代码的某些部份在每次办法调用中下行了两级且在第二次下行时调度不当时发生的.程序员可通过学习 Double Descent 错误情势来辨认这种问题.

Double Descent 错误情势

本周的专题是 Double Descent 错误情势.它通过类强迫转换非常来表明.它是由递归下行复合数据构造惹起的,这种下行方法有时在一次递归调用中要下行多级.这样做常常需求增添范例强迫转换来编译代码.但是,在这种下行中,很简单忘掉查抄能否满意了得当的不变量来保证这些范例强迫转换成功.

考虑以下的 int 二元树的类层次构造.因为我们但愿考虑到空树的情形,所以将不把 value 字段放入 Leaf 类中.由于这一决意使全部的 Leaf 相同,我们将用一个静态字段为 Leaf 保存一个单元素.

清单 1. int 二元树的类层次构造

abstract class Tree {
}
class Leaf extends Tree {
  public static final Leaf ONLY = new Leaf();
}
class Branch extends Tree {
  public int value;
  public Tree left;
  public Tree right;
  public Branch(int _value, Tree _left, Tree _right) {
   this.value = _value;
   this.left = _left;
   this.right = _right;
  }
}

目前,假定我们但愿在 Tree 上增添一个办法,该办法肯定肆意两个联贯的节点(比方一个分支和它的此中一个子分支)能否都包含一个 0 作为它们的值.我们大概增添以下办法(注意:最后一个办法将不以它的当前情势编译):

清单 2. 肯定两个联贯的节点能否都包含值 0 的办法

// in class Tree:
  public abstract boolean hasConsecutiveZeros();
  // in class Leaf:
  public boolean hasConsecutiveZeros() {
   return false;
  }
  // in class Branch:
  public boolean hasConsecutiveZeros() {
   boolean foundOnLeft = false;
   boolean foundOnRight = false;
   if (this.value == 0) {
    foundOnLeft = this.left.value == 0;
    foundOnRight = this.right.value == 0;
   }
   if (foundOnLeft || foundOnRight) {
    return true;
   }
   else {
    foundOnLeft = this.left.hasConsecutiveZeros();
    foundOnRight = this.right.hasConsecutiveZeros();
    return foundOnLeft || foundOnRight;
   }
  }


  以上是“诊断Java代码: Double Descent错误情势[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 .