如何解决'定义并抛出专用异常而不是使用通用异常'。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决'定义并抛出专用异常而不是使用通用异常'。相关的知识,希望对你有一定的参考价值。

当两个列表的长度不相等时,我需要throw RuntimeException。我们使用SonarQube工具进行代码审查。

这是代码:

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));
            }

现在,SonarQube提出Define and throw a dedicated exception instead of using a generic one.throw new RuntimeException线的问题。我不知道我可以替换哪个例外来解决SonarQube问题。

答案

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

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));
}
另一答案

Don't throw generic exceptions。您应该继承Exception,然后抛出您的子类,以便异常的类型实际上提供有关正在发生的事情的信息,允许该函数的客户端捕获并适当地处理它。

以上是关于如何解决'定义并抛出专用异常而不是使用通用异常'。的主要内容,如果未能解决你的问题,请参考以下文章

Spring AMQP RPC消费者并抛出异常

如何限制对任何路由的直接访问并抛出 404 异常,即使存在路由?

JPA:DELETE WHERE 不删除子级并抛出异常

Apache Beam - 即使程序连续执行,也会捕获并抛出异常。如何停止该进程或在管道中处理

异常处理——捕获并抛出

在am中定义消息集束,并在CO中验证之后抛出异常。