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)”而出现无限递归