मुझे चिंता है कि यह एक रनटाइम अपवाद है इसलिए इसे शायद ही इस्तेमाल किया जाना चाहिए।
मानक उपयोग मामला:
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
। ऐसा लगता है कि इसका उपयोग नहीं किया जाना चाहिए और हमें अपने स्वयं के चेक किए गए अपवादों से चिपके रहना चाहिए। इसे फेंकने के लिए एक अच्छा उपयोग मामला क्या है?