2012-01-29 22 views
5

मेरे पास एक तरीका है जिसे मैं प्रतिबिंब के माध्यम से कॉल करना चाहता हूं। विधि अपने तर्कों पर कुछ विभिन्न जांच करता है और नलपोइंटर और अवैध अवैध अपवादों को फेंक सकता है।जावा प्रतिबिंब और चेक अपवाद

प्रतिबिंब के माध्यम से विधि को कॉल करने से भी अवैध आर्ग्यूमेंट और नलपॉन्टर अपवाद फेंक सकते हैं जिन्हें पकड़ा जाना आवश्यक है। क्या यह निर्धारित करने का कोई तरीका है कि अपवाद विधि के द्वारा अपवाद, या विधि द्वारा अपवाद के कारण होता है?

उत्तर

17

यदि विधि ने स्वयं को अपवाद फेंक दिया है, तो इसे InvocationTargetException में लपेटा जाएगा।

आपका कोड मूल प्रश्न को यह

try 
{ 
    method . invoke (args) ; 
} 
catch (IllegalArgumentException cause) 
{ 
    // reflection exception 
} 
catch (NullPointerException cause) 
{ 
    // reflection exception 
} 
catch (InvocationTargetException cause) 
{ 
    try 
    { 
      throw cause . getCause () ; 
    } 
    catch (IllegalArgumentException c) 
    { 
      // method exception 
    } 
    catch (NullPointerException c) 
    { 
      //method exception 
    } 
} 
+3

अपवाद को 'InvocationTargetException' कहा जाता है, न कि' MethodInvocationException'। –

+1

@ स्टीफन सी अच्छा पकड़ो। – emory

0

दिखाई दे सकता है जवाब में, अपवादों में स्टैक ट्रेस अलग होगा।

एक विकल्प के रूप में आप कार्य को इन अपवादों को पकड़ सकते हैं और उन्हें विधि (या कक्षा) विशिष्ट अपवादों के रूप में पुनर्स्थापित कर सकते हैं।

संबंधित मुद्दे