Java 如果方法不适合当前对象,则引发哪个异常

Java 如果方法不适合当前对象,则引发哪个异常,java,exception,Java,Exception,如果该方法不适合当前对象,您会引发哪个异常 例如,在我的例子中,我编写了一个名为Interval的类,它表示一个时间间隔。这个类也允许空的间隔(没有一个时间点是这个间隔的元素)。现在我想实现一个方法,它返回一个时间点,它是这个时间间隔的元素。当然,这只有在间隔为非空时才可能实现。那么,如果它是空的,我必须抛出哪个异常呢 编辑:在类似情况下,我总是抛出的异常是IllegalArgumentException。但在这种情况下,它不适合,因为我的方法没有参数。在某种意义上,该对象对于该方法是非法的。您

如果该方法不适合当前对象,您会引发哪个异常

例如,在我的例子中,我编写了一个名为
Interval
的类,它表示一个时间间隔。这个类也允许空的间隔(没有一个时间点是这个间隔的元素)。现在我想实现一个方法,它返回一个时间点,它是这个时间间隔的元素。当然,这只有在间隔为非空时才可能实现。那么,如果它是空的,我必须抛出哪个异常呢


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

您可以让该方法抛出:

抛出以指示已向方法传递非法或不适当的参数

编辑:


正如所阐明的,该方法不能在实例本身上调用,那么您可以编写自己的异常,比如
EmptyIntervalException
。或者,如果
Interval
对象可以从状态更改为另一个状态(例如从空变为非空),则是一个不错的选择。

如果参数无效,我将抛出IllegalArgumentException

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

如果调用该方法无效,最好的选择是从此实例中删除该方法。您可以有一个实现此方法的类型/接口和另一个未实现此方法的类型/接口,编译器将在其中检测到您无法调用此方法


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

我不认为任何人会觉得IllegalArgumentException令人困惑,但您也可以尝试一下

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

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

UnsupportedOperationException
是“集合的一部分”,但AWT和NIO都将其子类化


您还可以创建自己的特殊情况异常,如
EmptyIntervalException extends RuntimeException
。如果没有完美的匹配,则没有问题。

我的理解是,同一个类同时表示空间隔和非空间隔,因此不能删除方法。您可能希望在大多数情况下相同地处理空类和非空类,因此不同的类也不起作用。当我编写自己的
EmptyIntervalException
时,哪个类应该是超级类?在我的类中,
Interval
的对象不能更改。所以,如果一个区间一旦空了,它就永远空了。所以他们不会改变状态。每次我想获得另一个间隔时,都必须创建一个新实例。@您可以让它扩展
RuntimeException