我擔心這是一個運行時異常,所以應該謹慎使用它。
標準使用案例:何時應拋出IllegalArgumentException?
void setPercentage(int pct) {
if(pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
但是,這似乎將迫使下面的設計:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
爲了得到它重新成爲一個檢查異常。
好的,但讓我們一起去。如果你輸入錯誤,你會得到一個運行時錯誤。所以,首先這實際上是一個相當困難的政策來實現均勻的,因爲你可以有做的很相反的轉換:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
更糟糕的是 - 當檢查0 <= pct && pct <= 100
客戶端代碼可望靜態做的,事實並非如此以獲取更高級的數據,例如電子郵件地址,或者更糟糕的是,必須對數據庫進行檢查,因此通常客戶端代碼無法預先驗證。
所以基本上我所說的是我沒有看到使用IllegalArgumentException
的有意義的一致性政策。它似乎不應該被使用,我們應該堅持我們自己的檢查異常。什麼是好的用例來拋出這個?
我認爲這個建議「期望是一個糟糕的論點是一個程序員錯誤」與我所見過的使用方式最爲一致,所以接受了這個答案。 – djechlin 2013-03-07 03:22:27