我刚刚读到“Oracle jdbc驱动程序抛出的一些SqlExceptions在cause字段中引用了它自己”。恕我直言可以让我自己尽可能轻松地从我的头发中pull myself出来。
但这似乎是正常的,即使Throwable.printStackTrace
识别出“循环引用”,这也是我所知道的JDK中唯一这样的地方(例如,所有Arrays.deep*
方法最终都会出现堆栈溢出递归结构)。
那么在原因链中创建周期的原因是什么?
答案 0 :(得分:2)
cause==this
means that no cause has been initialized. getCause()
将返回null
。 Throwable.printStackTrace
中的代码用于处理多元素循环。我认为这种循环没有任何充分的理由,但也许有些人因为错误或恶意而陷入困境。