2015-02-22 4 views
6

में अपवाद की अनदेखी करने के मैं निम्नलिखित कोड है:कैसे जावा

TestClass test=new TestClass(); 
test.setSomething1(0); //could, but probably won't throw Exception 
test.setSomething2(0); //could, but probably won't throw Exception 

मैं निष्पादित करने के लिए करना चाहते हैं: test.setSomething2(0); भी test.setSomething(0) अगर (यह ऊपर लाइन) एक अपवाद फेंकता है।

try{ 
    test.setSomething1(0); 
}catch(Exception e){ 
    //ignore 
} 
try{ 
    test.setSomething2(0); 
}catch(Exception e){ 
    //ignore 
} 

मैं एक पंक्ति में test.setSomething के का एक बहुत है और उन सभी अपवाद फेंक सकता है: वहाँ की तुलना में इस अन्य करने के लिए एक रास्ता है। अगर वे करते हैं, तो मैं बस उस रेखा को छोड़ना चाहता हूं और अगले स्थान पर जाना चाहता हूं।

स्पष्टीकरण के लिए, मुझे कोई परवाह नहीं है कि यह अपवाद फेंकता है, और मैं इस अपवाद को फेंकने वाले कोड के स्रोत कोड को संपादित नहीं कर सकता।

यह एक मामला है जहां मुझे अपवादों के बारे में परवाह नहीं है (कृपया सार्वभौमिक रूप से प्रमाणित बयानों का उपयोग न करें जैसे कि "आपको अपवादों को कभी अनदेखा नहीं करना चाहिए")। मैं कुछ ऑब्जेक्ट के मान सेट कर रहा हूं। जब मैं किसी उपयोगकर्ता को मान प्रस्तुत करता हूं, तो मैं वैसे भी शून्य जांच करता हूं, इसलिए वास्तव में कोई फर्क नहीं पड़ता कि कोड की किसी भी पंक्ति को निष्पादित किया जाता है।

+5

आपको ** कभी अपवादों को अनदेखा नहीं करना चाहिए। आपको ** कभी नहीं 'अपवाद' पकड़ना चाहिए।या तो आप ** विशिष्ट ** अपवाद को पकड़ने और संभालने की योजना बना रहे हैं या आप इसे संभाल नहीं सकते हैं, और इसे ढेर को ढंकने दें। –

+2

'setSomething1 (int a) के विधि हस्ताक्षर से' थ्रो 'हटाएं; ' –

+1

मेरे अनुभव में" शायद नहीं होगा "* लगभग निश्चित रूप से * मर्फी के कानून द्वारा * निश्चित रूप से * होगा। और यदि आपने अपवाद छुपाया है, तो आपको यह नहीं पता होगा कि यह कब होता है। –

उत्तर

12

मैं विवेक शक गंभीरता होगा किसी भी परीक्षण कोड का जो परीक्षण कोड से हटाए गए अपवादों को अनदेखा करता है। उस ने कहा, और यह मानते हुए कि आप जानते हैं कि आप क्या कर रहे हैं ... मूल रूप से एक अपवाद को अनदेखा करने का कोई तरीका नहीं है। सबसे अच्छा है कि आप क्या कर सकते हैं बॉयलरप्लेट आप में अपवाद-फेंकने कोड रैप करने के लिए की जरूरत को कम से कम है

आप जावा 8 पर हैं, तो आप इस का उपयोग कर सकते हैं:। तब

public static void ignoringExc(RunnableExc r) { 
    try { r.run(); } catch (Exception e) { } 
} 

@FunctionalInterface public interface RunnableExc { void run() throws Exception; } 

, और स्थिर आयात जिसका अर्थ अपने कोड

ignoringExc(() -> test.setSomething1(0)); 
ignoringExc(() -> test.setSomething2(0)); 
+0

दिलचस्प। माइंडब्लॉउन;) – CKing

+0

क्या मैं ऐसा कुछ कर सकता हूं? >> 'अनदेखा (एक्स) -> {/ * अंदर कोड * /});' –

1

दुर्भाग्य से नहीं, ऐसा नहीं है, और यह इरादे से है। जब सही तरीके से उपयोग किया जाता है, अपवादों को अनदेखा नहीं किया जाना चाहिए क्योंकि वे इंगित करते हैं कि कुछ काम नहीं करता है और आपको शायद अपना सामान्य निष्पादन पथ जारी नहीं रखना चाहिए। अपवादों को पूरी तरह से अनदेखा करना 'रग के तहत इसे स्वीप' पैटर्न का एक उदाहरण है, यही कारण है कि भाषा इतनी आसानी से समर्थन नहीं करती है।

शायद आपको देखना चाहिए कि क्यों TestClass.setSomething अपवाद फेंक रहा है। क्या आप जो भी परीक्षण कर रहे हैं, वास्तव में मान्य होने जा रहे हैं यदि सेटटर विधियों का एक गुच्छा सही ढंग से काम नहीं करता है?

0

आपको अपवादों को अनदेखा नहीं करना चाहिए। आपको उन्हें संभालना चाहिए। यदि आप अपना टेस्ट कोड सरल बनाना चाहते हैं, तो अपने कार्यों में ट्राइक-कैच ब्लॉक जोड़ें। अपवादों को अनदेखा करने का सबसे बड़ा तरीका उचित कोडिंग से उन्हें रोकना है।

1

आप जावा में अपवाद को अनदेखा नहीं कर सकते हैं। यदि कोई विधि कुछ फेंकने में सक्षम होने की घोषणा करता है क्योंकि ऐसा कुछ महत्वपूर्ण नहीं किया जा सकता है, और विधि डिजाइनर द्वारा त्रुटि को ठीक नहीं किया जा सकता है। तो तुम सच में आसान बनाने के लिए अपने जीवन को इस तरह किसी अन्य विधि में विधि कॉल संपुटित wan't यदि:

class MyExceptionFreeClass { 
    public static void setSomething1(TestClass t,int v) { 
    try { 
     t.setSomething1(v); 
    } catch (Exception e) {} 
    public static void setSomething2(TestClass t,int v) { 
    try { 
     t.setSomething2(v); 
    } catch (Exception e) {} 
} 

और इसे कहते हैं जब आप इसे की जरूरत है:

TestClass test=new TestClass(); 
MyExceptionFreeClass.setSomething1(test,0); 
MyExceptionFreeClass.setSomething2(test,0); 
0
try { 
// Your code... 
} catch (Exception ignore) { } 

उपयोग शब्द ignoreException कीवर्ड के बाद हो जाता है।

+4

अनदेखा वह नाम है जिसे आप अपवाद को असाइन करते हैं, इससे कोई फर्क नहीं पड़ता कि आप जो नाम देते हैं –