【发布时间】:2017-02-15 15:16:41
【问题描述】:
关于“已检查与未检查的异常”主题的 SO 上有很多帖子。 This answer 可能是最全面和信息最丰富的。然而,我仍然对遵循那里提出的逻辑感到矛盾,这是有原因的。
我正在围绕一组彼此相似的服务构建一个封装 API。但是,它们之间存在细微差别(或将来可能出现这种差异),因此某些功能(次要和快捷性质)可能由某些服务支持而其他服务不支持。因此,采用以下方法似乎是合乎逻辑的:
public interface GenericWrapperInterface {
void possiblyUnsupportedOperation () throws java.lang.UnsupportedOperationException;
}
为什么是UnsupportedOperationException?因为它就是专为这种情况而设计的。
但是,除了 Oracle 的 own manual 之外,所有相关的 SO 帖子都假定,如果异常用于表示客户端可以恢复的问题,或可预测但不可避免的问题,那么该异常应该是检查了一个。我的案例符合这些要求,因为对于某些操作,可能会提前知道它们不可用的可能性,并且这些操作并不重要,如果需要可以避免。
所以我迷失在这个难题中。我应该使用完美匹配的标准异常并违反异常使用的常见逻辑,还是应该构建自己的检查替代方案,从而重复代码并在 API 用户之间造成额外的混乱?
【问题讨论】:
-
如果事先知道该操作不受支持,调用它应该引发未经检查的异常,因为这是不应该发生的编程错误。
-
@ZhongYu,客户端代码可能知道缺少支持的可能性,但是每个特定的实现对象是否具有该支持可能直到运行时才知道。
标签: java exception-handling custom-exceptions checked-exceptions