实际上,在编程语言中,异常类型的确切类型有多重要?假设我有一本书的章节层次结构,我使用一种方法来访问这些章节。一个是:
public void chapterSearch(int chapter) {
try {
chapterString = this.hierarchy.get(chapter).getText();
} catch(IndexOutOfBoundsException e) {
throw new....
}
}
第二个是:
public void chapterSearch(String chapterString) {
for(int i = 0; i < this.hierarchy.size(); i++) {
if(chapterString.equals(this.hierarchy.get(i).getText())) {
break;
} else if(i == this.hierarchy.size() - 1) {
throw new IllegalArgumentException...
}
}
}
在第一种方法中,很明显抛出一个新的IndexOutOfBoundsException
。但是你可以使用IllegalArgumentException
,根据javadoc是
抛出表示方法已被传递非法或不适当的参数。
这似乎也非常适合这种情况。我的意思是,传递一个非常大的章节编号,其中没有这样的章节编号似乎对我来说非常不合适。或者,如在评论中,我可以抛出我自己的新例外ChapterNotFoundException
。但这可能很麻烦,而且我可能不会多次使用此异常 - 似乎使用预先存在的Exception更为贴切。
但总的来说,即使在这种情况下,IndexOutOfBoundsException
仍然是最合适的,或者如果您愿意,ChapterNotFoundException
,一般情况下,异常类型的选择有多重要?
我想创建你自己的Exception类型一旦你经常使用它就会有意义,但是如果你不是这样的话呢?
编辑: 一个好的,相关的答案,虽然下面的答案非常好,但是here。
答案 0 :(得分:3)
我认为这取决于您希望如何处理异常。如果您希望程序失败然后再深入日志,我会投票支持
throw new IllegalArgumentException("Unexpected chapter: \"" + chapterString + "\"");
如果你想捕获异常并处理它,那么创建ChapterNotFoundException
会更有意义。但是,如果您想在代码中处理它,您应该考虑创建一个布尔方法来检查该章是否存在,并避免处理该异常。
答案 1 :(得分:2)
通过良好的编码指南,捕获确切的异常非常重要(尽可能)。
原因如下
要说出一条线,回答问题总是比击败灌木更好