异常类型的确切类型(实际上在编程语言中)有多重要?假设我有一本书的章节层次结构,并且我使用一种方法来访问这些章节。一种是:
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
. 但这可能很麻烦,而且我可能不会多次使用此异常 - 看起来使用预先存在的异常可能更合适。
但总的来说,即使在这种情况下IndexOutOfBoundsException
仍然是最合适的,或者如果您更愿意,ChapterNotFoundException
异常类型的选择通常有多大关系?
我想一旦你经常使用它,创建你自己的异常类型就会很有意义,但如果你不是呢?
编辑:一个很好的相关答案,虽然下面的答案也很好,在这里。