Saya khawatir ini adalah pengecualian waktu proses sehingga mungkin harus digunakan dengan hemat.
Kasus penggunaan standar:
void setPercentage(int pct) {
if( pct < 0 || pct > 100) {
throw new IllegalArgumentException("bad percent");
}
}
Tapi sepertinya itu akan memaksa desain berikut:
public void computeScore() throws MyPackageException {
try {
setPercentage(userInputPercent);
}
catch(IllegalArgumentException exc){
throw new MyPackageException(exc);
}
}
Untuk mengembalikannya menjadi pengecualian yang dicentang.
Oke, tapi mari kita lakukan itu. Jika Anda memberikan input yang buruk, Anda akan mendapatkan error runtime. Jadi pertama-tama, itu sebenarnya kebijakan yang cukup sulit untuk diterapkan secara seragam, karena Anda dapat melakukan konversi yang sangat berlawanan:
public void scanEmail(String emailStr, InputStream mime) {
try {
EmailAddress parsedAddress = EmailUtil.parse(emailStr);
}
catch(ParseException exc){
throw new IllegalArgumentException("bad email", exc);
}
}
Dan lebih buruk - saat memeriksa 0 <= pct && pct <= 100
kode klien dapat diharapkan untuk dilakukan secara statis, ini tidak berlaku untuk data yang lebih canggih seperti alamat email, atau lebih buruk, sesuatu yang harus diperiksa terhadap database, oleh karena itu secara umum kode klien tidak dapat digunakan sebelumnya. mengesahkan.
Jadi pada dasarnya apa yang saya katakan adalah saya tidak melihat kebijakan konsisten yang berarti untuk digunakan IllegalArgumentException
. Tampaknya itu tidak boleh digunakan dan kami harus tetap berpegang pada pengecualian kami sendiri. Apa kasus penggunaan yang baik untuk membuang ini?