考虑一下这个仅用于提问我的自定义代码
此方法只是名为CompleteGraph的类中的众多方法之一。细节不是必需的。 GetEdges进行2次检查 - 一次验证是否构造了完整图,如果是,则检查输入是否为空。
但我也可以交换检查并检查nodeId==null
之前,这意味着即使两个条件都抛出异常,但用户收到的异常顺序也不同。
我的问题是 - 为了获得更好的用户体验,是否有一些关于返回异常的指令/链接?
public Map<T, Double> getEdges(T nodeId) {
if (isGraphComplete()) throw new IllegalStateException("The graph is not complete graph.");
if (nodeId == null) throw new NullPointerException("The nodeId input is null");
Map<T, Double> map = heuristic.get(nodeId);
return map == null ? map : Collections.EMPTY_MAP;
}
答案 0 :(得分:3)
要直接回答您的问题,我认为没有针对哪个命令抛出验证异常(或任何例外情况)的一般指导原则。我也不同意Elliott关于这个问题的另一个答案,你不应该抛出未经检查的例外。
由于你的问题有点主观,这是我更主观的答案。我认为这取决于您认为为呼叫者提供更好的“用户体验”。如果你打电话给这个方法,你会发生什么?然后只要记录给调用者,就没关系。
如果您不知道您的呼叫者是谁(即您的班级是在图书馆中)并且不知道他们的用例,则很难知道呼叫者将如何处理异常。您无法根据自己的意愿做出明智的决定。
现在特别关注你的代码,我通常会选择“如果你知道你将会失败,快速失败”的理念。如果你的isGraphComplete方法更贵,并且你知道你的方法可能会因为参数为null而稍后失败,我会先进行廉价的空检查。
答案 1 :(得分:2)
用户不使用开发人员API。开发人员为他们设计!也就是说,通常我不会抛出未经检查的异常(但我会专注于记录我抛出的所有异常,我甚至可以定义我自己检查的异常 - 然后记录的内容更少)!