【发布时间】:2016-12-03 11:22:59
【问题描述】:
我正在开发一个消息库,对象的 send 方法可能由于多种原因而失败,例如套接字被关闭等。
我更喜欢检查异常而不是运行时异常,但我想知道是否更适合早期链接异常,这样底层异常总是包装在另一个更通用的异常中。
例如,一条消息可能只抛出一个选中的SendFailedException,但cause() 会更具体,例如SocketClosedException。感觉它比单独抛出所有检查的异常要少。
继承在这里不太有效,因为 SocketClosedException 也可以用于其他方法。并不是每个关闭的异常都是发送失败的结果。
将更多信息包含在cause() 中是否合适,或者这最终会更加混乱?我不记得在野外发现以这种方式运行的异常,这可能是非常规的并且对其他人来说是混乱的。
Java 或其他库是否曾经这样做过?它适合我的用例吗?
【问题讨论】:
-
几乎每个带有正常检查(或未检查)异常的库都通过继承定义了自己的异常层次结构。每当有需要重新抛出的异常时,都应该将其用作原因,原因就是它的用途。
-
And not every closed exception is a result of a failure to send.你能举个例子什么关闭的异常不是发送失败? -
关闭后尝试从套接字查询无效状态时可能会引发关闭异常。
标签: java exception exception-handling