两种或多种异常类型同时适用

时间:2016-01-13 17:17:02

标签: java exception

假设我设计了一个计算arcsin函数的方法。当然,只有闭合区间[-1,1]中的数字才可以作为函数的参数。

但是,如果超出该间隔的数字,则该方法抛出异常。我的问题是,IllegalArgumentExceptionArithmeticException是否同样适用?如果是,请列举两个或更多异常类型同样​​适用的案例。如果没有,为什么?

3 个答案:

答案 0 :(得分:1)

这确实是您的设计决定某事应该如何运作的一个因素。另一种选择是抛出自定义检查异常,我认为只要您在包/ API中保持一致,并且如果有的话,请遵循既定的编码标准,您就可以了。我认为要么是这两者中的一个有效选择,我只是做出一个设计决策并将其记录下来,这样它就是未来发展的既定决定。所有这一切,我可能会选择IllegalArgumentException,因为它早先发现了问题。

答案 1 :(得分:1)

在Java中,一次可以引发一种类型的异常。

可以嵌套异常(通过将一个异常包装在另一个异常中 - 请参阅cause参数作为基础Exception()构造函数的一部分)

在arcsin的情况下,抛出的参数将取决于函数契约的定义方式。可以认为,任何一个例外都是适用的,但鉴于输入参数的有效范围已明确定义,这些可以作为合同的一部分显式化,并且通过使用IllegalArgumentException拒绝无效的参数。

使用IllegalArgumentException是:

  

抛出表示某个方法已被传递为非法或   不恰当的论点。

鉴于可以预先知道可接受值范围的任何算法,这似乎是抛出异常的正确选择。

答案 2 :(得分:0)

IllegalArgumentException似乎更有效。它告诉我,我做错了(I.E.传递了无效的参数),而ArithmeticException暗示应用程序无法执行算法,但没有提供关于原因的线索。