JD.INF.AREC

当方法在没有执行任何事先检查的情况下自我调用时,发生 JD.INF.AREC。

漏洞与风险

如果调用了该方法,其会不断自我调用,然后程序栈会溢出,并且 JVM 会引发 StackOverflowError。显然,这并非程序员的意图。

缓解与预防

JD.INF.AREC 列出了三个可能的原因。

  • 实例对象有拼写错误。例如,程序员输入的是“this.equals(o)”,而不是“super.equals(o)”。修正实例对象的拼写错误。
  • 没有将方法的参数用于特定类型。例如,参数应是 this.equals((MyType)o)。将参数用于特定类型。
  • 缺少递归终止条件。添加停止递归的条件。

示例 1

复制
    /**
     * Implementation required by the interface.
     * @param o - object to compare
     * @return true, if equal.
     */
    public boolean equals(Object o) {
      return this.equals(o);
    }

针对第 16 行的调用报告 JD.INF.AREC:因调用自身的“equals(java.lang.Object)”而出现无限递归