SO上有很多关于“已检查与未检查异常”主题的帖子。这个答案可能是最全面和信息最丰富的。然而,我仍然对遵循那里提出的逻辑感到矛盾,这是有原因的。
我正在围绕一组彼此相似的服务构建一个包装 API。但是,它们之间存在细微差别(或将来可能出现这种差异),因此某些功能(次要和快捷性质)可能由某些服务支持而其他服务不支持。因此,采用以下方法似乎是合乎逻辑的:
public interface GenericWrapperInterface {
void possiblyUnsupportedOperation () throws java.lang.UnsupportedOperationException;
}
为什么UnsupportedOperationException
?因为它正是为这种情况而设计的。
但是,除了 Oracle自己的手册之外,所有相关的 SO 帖子都假定,如果使用异常来表示客户端可以从中恢复的问题,或者是可预测但不可避免的问题,那么该异常应该是经过检查的异常。我的案例符合这些要求,因为对于某些操作,可能会提前知道它们不可用的可能性,并且这些操作并不重要,如果需要可以避免。
所以我迷失在这个难题中。我应该使用完美匹配的标准异常并违反异常使用的常见逻辑,还是应该构建自己的检查替代方案,从而重复代码并在 API 用户之间造成额外的混乱?