gpt4 book ai didi

java - Throwable 类(Java 中)的 getCause() 函数未按预期工作

转载 作者:行者123 更新时间:2023-12-01 18:17:40 25 4
gpt4 key购买 nike

我在调用 ThrowablegetCause 函数时得到 null。

package com.salman.demo;
public class MyClass {
public static void main(String[] args) {
// TODO Auto-generated method stub

try {
NormalClass.testIt();
} catch (Throwable th) {
System.out.println(th.getCause());
}
}
}


package com.salman.demo;

import com.salman.exceptions.ValidationException;

public class NormalClass {
public static void testIt() throws ValidationException {
System.out.println("Inside testIt funtion.");

throw new ValidationException("Validation Exception..");
}
}

运行MyClass时,它会打印以下输出

Inside testIt funtion.
null

但是在调试时,我可以看到原因私有(private)变量的值设置为 ValidationException 这是预期的,但在调用该私有(private)字段的 getter 时返回 null。

最佳答案

您抛出的 ValidationException 将在您的调用代码中出现th...没有理由ValidationExceptiongetCause() 的目的是让一个异常能够引用另一个异常作为根本原因 - 但您的情况只有一个异常。

您看到私有(private) cause 变量的值为 ValidationException 的事实完全符合该字段的记录方式(强调我的):

The throwable that caused this throwable to get thrown, or null if throwable was not caused by another throwable, or if the causative throwable is unknown. If this field is equal to this throwable itself, it indicates that the cause of this throwable has not yet been initialized.

这就是为什么 getCause() 实现为:

return (cause==this ? null : cause);

如果您想查看预期的链接效果,您可以创建两个异常,一个链接到另一个:

throw new ValidationException("Validation Exception..",
new IllegalArgumentException("Bang!"));

现在对 ValidationException 调用 getCause() 将返回 IllegalArgumentException

您可能只想更改调用代码以记录 th 而不是 th.getCause()

关于java - Throwable 类(Java 中)的 getCause() 函数未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28743504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com