これは実行時例外なので、慎重に使用する必要があるのではないかと心配しています。
標準的な使用例:
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
。使用すべきではないようで、独自のチェック済み例外に固執する必要があります。これをスローするのに適したユースケースは何ですか?