Tôi lo lắng rằng đây là một ngoại lệ thời gian chạy vì vậy nó có lẽ nên được sử dụng một cách tiết kiệm.
Trường hợp sử dụng tiêu chuẩn:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Nhưng điều đó có vẻ như nó sẽ buộc thiết kế sau:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Để đưa nó trở lại là một ngoại lệ đã kiểm tra.
Được rồi, nhưng hãy làm với điều đó. Nếu bạn nhập sai, bạn sẽ gặp lỗi thời gian chạy. Vì vậy, trước tiên đó thực sự là một chính sách khá khó thực hiện một cách thống nhất, bởi vì bạn có thể phải thực hiện chuyển đổi ngược lại:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Và tệ hơn - trong khi kiểm tra 0 <= pct && pct <= 100
mã máy khách có thể được thực hiện tĩnh, điều này không đúng đối với dữ liệu nâng cao hơn như địa chỉ email, hoặc tệ hơn, một cái gì đó phải được kiểm tra dựa trên cơ sở dữ liệu, do đó nói chung mã máy khách không thể trước xác thực.
Vì vậy, về cơ bản những gì tôi đang nói là tôi không thấy một chính sách nhất quán có ý nghĩa để sử dụng IllegalArgumentException
. Có vẻ như nó không nên được sử dụng và chúng ta nên tuân theo các ngoại lệ đã kiểm tra của riêng mình. Một trường hợp sử dụng tốt để ném cái này là gì?