用户输入是否应该导致检查异常?

Should user input cause checked exceptions?

我有一个 operation/method 可以执行对数据库的插入。它需要几个字段,并且由于各种原因,操作可能会失败,因为一个或多个输入不是唯一的,或者因为它们与一些需要唯一的内部记录冲突。

saveUserInfo(primaryToken,secondaryToken,userid);

我对每次违规抛出检查异常是否有意义?

我的想法是使用以下内容:

saveUserInfo(String primaryToken, String secondaryToken, String id) 
throws PrimaryTokenTakenException,SecondaryTokenTakenException

强制任何调用此方法的开发人员通过将网络用户路由到请求新令牌的页面来处理它。

反对 这种方法的反对者指出,我们开发团队知道每一种可能导致失败的错误情况,应该 return 错误代码并使用它来处理每种情况。

int errorCode = saveUserInfo(primaryToken,secondaryToken,userid);

我没有发现 checked 方法有任何明显的缺点。这些错误情况很可能发生,您绝对必须在使用 saveUserInfo() 的任何地方解决它们。似乎正是为这种情况创建了检查异常。

使用检查异常来处理无效用户输入当然是一种有效且合理的方法,只要您的程序能够检测到这些情况并从中正确恢复。已检查异常仅意味着您的程序接口需要建立并遵循与处理程序逻辑错误有关的合同,而未检查(运行时)异常是以您的程序无法在运行时安全地从中恢复的方式发生的异常。您处理异常的 方法 可能取决于您的开发团队的理念,但已检查与未检查的情况仍然存在——您知道如何检测无效输入并合理地从无效输入中恢复,所以你应该有义务为此做点什么。

有关指南,请参阅 this page 回复:Java 中的例外情况。