2012-01-07 21 views
5

मैंबायपास जावा अपवाद विनिर्देश ...?

public class Settings 
{ 
    static final URL logo = new URL("http://www.example.com/pic.jpg"); 
    // and other static final stuff... 
} 

क्या करना चाहते हैं, लेकिन मुझे बताया गया हो कि मैं MalformedURLException संभाल करने की जरूरत है। ये चश्मे कहते हैं कि MalformedURLException

यह इंगित करने के लिए फेंक दिया गया है कि एक विकृत यूआरएल हुआ है। या तो विनिर्देश स्ट्रिंग में कोई कानूनी प्रोटोकॉल नहीं मिला या स्ट्रिंग को पार्स नहीं किया जा सका।

अब, मुझे पता है कि मैं जो यूआरएल देता हूं वह विकृत नहीं है, इसलिए मैं अपवाद को संभाल नहीं लेता जिसे मैं नहीं जानता।

क्या मेरे स्रोत कोड को क्लोजिंग करने के अनावश्यक प्रयास-पकड़-ब्लॉक से बचने के लिए वैसे भी है?

उत्तर

12

सबसे छोटा जवाब नहीं है। लेकिन आप यूआरएल बनाने के लिए एक स्थिर उपयोगिता विधि बना सकते हैं।

private static URL safeURL(String urlText) { 
    try { 
     return new URL(urlText); 
    } catch (MalformedURLException e) { 
     // Ok, so this should not have happened 
     throw new IllegalArgumentException("Invalid URL " + urlText, e); 
    } 
} 

यदि आपको कई स्थानों से ऐसा कुछ चाहिए तो आपको इसे एक उपयोगिता वर्ग में रखना चाहिए।

+0

सरल और संक्षिप्त। '// ठीक है, तो यह नहीं होना चाहिए था' – Perception

4

निम्नलिखित का प्रयास करें:

public class Settings 
{ 
    static final URL logo; 

    static 
    { 
     try 
     { 
      logo = new URL("http://www.example.com/pic.jpg"); 
     } 
     catch (MalformedURLException e) 
     { 
      throw new IllegalStateException("Invalid URL", e); 
     } 
    } 
    // and other static final stuff... 
} 
+0

हां, धन्यवाद, मुझे कोशिश-पकड़ के वाक्यविन्यास और अर्थशास्त्र पता है, यह मुद्दा नहीं है। मेरी समस्या यह है कि मैं ** ** जानता हूं कि अपवाद कभी नहीं हो सकता है, यही कारण है कि मैं अपने स्रोत कोड को अनावश्यक प्रयास-पकड़-खंडों से छिपाने से बचना चाहता हूं। सी ++ में मैं बस अपवाद को नजरअंदाज कर दूंगा और संकलक मुझे इसके बारे में परेशान नहीं करेगा, है ना? जावा में ... मुझे सच में लगता है कि संकलक को इस मामले में अपवाद स्पेक को लागू नहीं करने का एक तरीका होना चाहिए, एक कंपाइलर निर्देश, अगर कुछ और नहीं ... – OppfinnarJocke

+0

@OppfinnarJocke ओह, मैं आपको अपमानित करने का इरादा नहीं रखता हालांकि आप स्थिर प्रारंभिक के बारे में नहीं जानते हैं। दुर्भाग्यवश, जावा "बस यहां बंद करें" कहने का कोई तरीका नहीं है: यदि ऐसी कोई सुविधा थी, तो अपवाद अभी भी एक गड़बड़ी से अधिक होंगे। प्वाइंट है, हर सुविधा लगभग हर दूसरे के साथ बातचीत करती है। जादुई रूप से बंद अपवादों का मतलब यह होगा कि एक ही कोड संकलित या संकलित नहीं कर सकता है जिसे आप कुछ भी नहीं देखते हैं। – alf

+0

धन्यवाद अल्फ। मैं नाराज नहीं था, माफ करना अगर यह इस तरह से आया ... हाँ, मैं समझता हूं कि अपवाद जांच को बंद करना पूरी तरह से गड़बड़ कर सकता है, लेकिन एक कंपाइलर निर्देश कहने के लिए, जैसा कि आप इसे कहते हैं, "यहां बंद करें" उपयोगी प्रतीत होता है इन दुर्लभ (?) मामलों में। वैसे भी, मैं इसके बजाय स्ट्रिंग का उपयोग करूंगा और कोड में कहीं और यूआरएल बनाउंगा (जहां कोशिश-पकड़ मेरे लिए अधिक उपयुक्त लगता है)। बहुत बहुत धन्यवाद। – OppfinnarJocke

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