假设我设计了一个计算arcsin
函数的方法。当然,只有闭合区间[-1,1]中的数字才可以作为函数的参数。
但是,如果超出该间隔的数字,则该方法抛出异常。我的问题是,IllegalArgumentException
和ArithmeticException
是否同样适用?如果是,请列举两个或更多异常类型同样适用的案例。如果没有,为什么?
答案 0 :(得分:1)
这确实是您的设计决定某事应该如何运作的一个因素。另一种选择是抛出自定义检查异常,我认为只要您在包/ API中保持一致,并且如果有的话,请遵循既定的编码标准,您就可以了。我认为要么是这两者中的一个有效选择,我只是做出一个设计决策并将其记录下来,这样它就是未来发展的既定决定。所有这一切,我可能会选择IllegalArgumentException
,因为它早先发现了问题。
答案 1 :(得分:1)
在Java中,一次可以引发一种类型的异常。
可以嵌套异常(通过将一个异常包装在另一个异常中 - 请参阅cause
参数作为基础Exception()构造函数的一部分)
在arcsin的情况下,抛出的参数将取决于函数契约的定义方式。可以认为,任何一个例外都是适用的,但鉴于输入参数的有效范围已明确定义,这些可以作为合同的一部分显式化,并且通过使用IllegalArgumentException
拒绝无效的参数。
抛出表示某个方法已被传递为非法或 不恰当的论点。
鉴于可以预先知道可接受值范围的任何算法,这似乎是抛出异常的正确选择。
答案 2 :(得分:0)
IllegalArgumentException
似乎更有效。它告诉我,我做错了(I.E.传递了无效的参数),而ArithmeticException
暗示应用程序无法执行算法,但没有提供关于原因的线索。