更多上下文:我有一个监听网络连接的监听器类。不应该两次调用它的listen
方法。它应该扔什么?
答案 0 :(得分:5)
如果要使用预定义的异常,可能会抛出IllegalStateException
,因为该对象已处于listening
状态。
但是,如果您这样做,客户应该有办法找出是否已调用listen
。例如。 isListening()
方法。
您可能还会创建自己的异常,可能是从IOException扩展的,因为这是一个IO问题。据推测,尝试多次侦听失败,因为网络资源已经在第一次侦听时使用。 (类似于套接字绑定。)
答案 1 :(得分:3)
由于逻辑错误只能在您的库的客户端错误地使用它时发生,因此您抛出的异常应该是未经检查的异常(例如java.lang.RuntimeException
或其衍生物)而不是检查异常。
java.lang.IllegalStateException
旨在实现此目的:
“表示在非法或不适当的时间调用了某个方法”
但它也可能是您自定义的异常层次结构中的异常。
答案 2 :(得分:2)
在这种情况下,我会抛出IllegalStateException
。它通常用于表示用户试图在对象的当前状态下制作一些不合法的东西。