clojure.lang.ExceptionInfo的两个参数构造函数将链接到三个参数版本,传递null作为原因。然后三参数构造函数调用具有null原因的super,上述行是注释“null原因等效于未传递原因”。
这实际上并不正确,因为在这里传递null意味着原因已被初始化,无论其值如何。因此,您无法在之后的ex-info异常上调用.initCause。在我的情况下,'cause'在抛出时是未知的:异常被向上捕获,添加原因,然后重新抛出。
总之,这个表达式将始终抛出一个异常:(-> (ex-info "ex" {}) (.initCause (Exception. "cause")))。
简单解决方法是对两个参数的super进行调用,并在原因非null的情况下调用.initCause。
感谢道,
Mat。