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