如果方法不适合当前对象,则抛出哪个异常

时间:2015-05-06 20:10:43

标签: java exception

如果该方法不适合当前对象,您会抛出哪个异常?

例如在我的例子中,我写了一个名为Interval的类,它代表一个时间间隔。此类还允许空间隔(没有单个时间点是此间隔的元素)。现在我想实现一个返回一个时间点的方法,该时间点是这个时间间隔的元素。这当然只有在间隔非空的情况下才有可能。那么,如果它是空的,我必须抛出哪个Exception?

编辑:我总是在类似案例中抛出的异常是IllegalArgumentException。但在这种情况下它不适合,因为我的方法没有参数。对于该方法而言,这在某种意义上是非法的。

4 个答案:

答案 0 :(得分:4)

UnsupportedOperationExceptionArithmeticException

UnsupportedOperationException是"收藏品的一部分"但AWT和NIO都将其分类。

您也可以像EmptyIntervalException extends RuntimeException一样制作自己的特殊情况例外。没有问题,如果没有完美契合。

答案 1 :(得分:3)

我认为没有人会发现IllegalArgumentException令人困惑,但您也可以尝试IllegalStateException

  

表示在非法或不适当的时间调用了某个方法。换句话说,Java环境或Java应用程序未处于所请求操作的适当状态。

在这种情况下,Interval处于非法状态,即设置为空时间段。

答案 2 :(得分:1)

您可以让方法抛出IllegalArgumentException

  

抛出以表明方法已被传递为非法或不恰当的参数。

修改

由于澄清了无法在实例本身上调用该方法,因此您可以编写自己的异常,例如EmptyIntervalException。或者,如果Interval对象可以从一个状态更改为另一个(例如从空状态变为非空状态),那么IllegalStateException将是一个不错的选择。

答案 3 :(得分:1)

如果参数无效,我会抛出IllegalArgumentException。

如果对象的状态无效,您可以使用InvalidStateException

最佳选择是从该实例中删除无效调用方法。你可以有一个实现这个方法的类型/接口,而另一个不是这样,编译器可以检测到你不能调用该方法。

另一个选择是让方法返回nullNoSuchTime对象。这取决于您的预期用例,哪个更好。