आप इसे स्थैतिक फ़ंक्शन के भीतर बना सकते हैं, जब तक आप इसे अपवाद (संभावित रूप से) उठाते हैं।
public class MyClass {
protected static final Setter setter = createSetter();
protected static Setter createSetter() {
try {
return new Setter();
} catch(FileNotFoundException e) {
// handle it appropriately
return null;
}
}
}
वहाँ अपवाद प्रचार करने के लिए अनुमति देने के लिए कोई रास्ता नहीं है, क्योंकि यह एक जाँच अपवाद को जन्म देती है (और है कि प्रारंभ के दौरान गैरकानूनी है) है। जानने के कुछ तरीके कि से निपटने के लिए है:
बढ़ाएं एक अनियंत्रित अपवाद: इस का कारण बनता है एक java.lang.ExceptionInInitializerError
उठाया पाने के लिए जब यह वर्ग लोड करने के लिए कोशिश करता है। यह भ्रमित हो सकता है, और पता लगाने और डीबग करने के लिए मुश्किल हो सकता है। मैं इसकी सिफारिश नहीं करता हूं।
यह एक गैर अंतिम चर को बदलें, और यह उपयोग करने के लिए एक समारोह बनाने के लिए: चर के गैर अंतिम, आप देख सकते हैं कि इसे पाने में सेट है, और अगर यह नहीं है की जाँच की अपवाद बढ़ा देते हैं। यह अनुमति देता है जहां यह कहा जाता है पर अपवाद को संभालने के लिए (वास्तव में, की आवश्यकता है) अपने कोड:
public class MyClass {
private static Setter setter;
protected static synchronized Setter getSetter() raises FileNotFoundException {
if setter == null {
setter = new Setter();
}
return setter;
}
}
स्रोत
2010-07-14 14:24:58
आम तौर पर यदि कोई चेक अपवाद फेंकता है, तो ऐसा कुछ नहीं है जिसे आप स्थिर में स्टोर करना चाहते हैं। –