이것이 런타임 예외이므로 아껴서 사용해야 할까 걱정됩니다.
표준 사용 사례 :
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
것은 클라이언트 코드 를 확인 하는 것이 정적으로 수행 될 것으로 예상 될 수 있지만 이메일 주소와 같은 고급 데이터 또는 더 나쁜 경우에는 데이터베이스에 대해 확인해야하는 항목에 대해서는 그렇지 않습니다. 따라서 일반적으로 클라이언트 코드를 미리 확인할 수 없습니다. 확인.
따라서 기본적으로 .NET 사용에 대한 의미있는 일관된 정책이 보이지 않는다는 것입니다 IllegalArgumentException
. 그것은 사용되어서는 안되는 것 같고 우리는 우리 자신의 확인 된 예외를 고수해야합니다. 이것을 던지는 좋은 사용 사례는 무엇입니까?