如何解决“定义并引发专用异常,而不是使用通用异常”。

2022-09-04 01:42:35

当两个列表的长度不相等时,我需要这样做。我们正在使用工具进行代码审查。throw RuntimeExceptionSonarQube

代码如下:

if (objctArray.length != columnArray.length) {
                throw new RuntimeException(String.format("objctArray and columnArray length is not same. objctArray length = %d, columnArray length = %d", objctArray.length, columnArray.length));
            }

现在,提出了一个问题。我不知道可以替换哪个异常来解决问题。SonarQubeDefine and throw a dedicated exception instead of using a generic one.throw new RuntimeExceptionSonarQube


答案 1

如果这两个列表是传递给方法的参数,那么这将是一个很好的候选者。它是 的子类,所以你仍然会抛出一种 .IllegalArgumentExceptionRuntimeExceptionRuntimeException

if (objctArray.length != columnArray.length) {
    throw new IllegalArgumentException(String.format("objctArray and columnArray length is not same. objctArray length = %d, columnArray length = %d", objctArray.length, columnArray.length));
}

答案 2

不要引发一般异常。您应该对 Exception 进行子类化,然后抛出子类,以便异常的类型实际上提供有关正在发生的事情的信息,从而允许函数的客户端捕获并适当地处理它。