如果该方法不适合当前对象,您会抛出哪个异常?
例如在我的例子中,我写了一个名为Interval
的类,它代表一个时间间隔。此类还允许空间隔(没有单个时间点是此间隔的元素)。现在我想实现一个返回一个时间点的方法,该时间点是这个时间间隔的元素。这当然只有在间隔非空的情况下才有可能。那么,如果它是空的,我必须抛出哪个Exception?
编辑:我总是在类似案例中抛出的异常是IllegalArgumentException
。但在这种情况下它不适合,因为我的方法没有参数。对于该方法而言,这在某种意义上是非法的。
答案 0 :(得分:4)
UnsupportedOperationException
,ArithmeticException
。
UnsupportedOperationException
是"收藏品的一部分"但AWT和NIO都将其分类。
您也可以像EmptyIntervalException extends RuntimeException
一样制作自己的特殊情况例外。没有问题,如果没有完美契合。
答案 1 :(得分:3)
我认为没有人会发现IllegalArgumentException令人困惑,但您也可以尝试IllegalStateException
表示在非法或不适当的时间调用了某个方法。换句话说,Java环境或Java应用程序未处于所请求操作的适当状态。
在这种情况下,Interval处于非法状态,即设置为空时间段。
答案 2 :(得分:1)
您可以让方法抛出IllegalArgumentException
:
抛出以表明方法已被传递为非法或不恰当的参数。
修改强>
由于澄清了无法在实例本身上调用该方法,因此您可以编写自己的异常,例如EmptyIntervalException
。或者,如果Interval
对象可以从一个状态更改为另一个(例如从空状态变为非空状态),那么IllegalStateException
将是一个不错的选择。
答案 3 :(得分:1)
如果参数无效,我会抛出IllegalArgumentException。
如果对象的状态无效,您可以使用InvalidStateException
。
最佳选择是从该实例中删除无效调用方法。你可以有一个实现这个方法的类型/接口,而另一个不是这样,编译器可以检测到你不能调用该方法。
另一个选择是让方法返回null
或NoSuchTime
对象。这取决于您的预期用例,哪个更好。