2012-05-10 14 views
8

में एआरएम के लिए क्यों स्टैक्स कक्षाओं को पुनः लोड नहीं किया गया था, मुझे जावा 7 में XMLStreamReaderAutoCloseable होने की उम्मीद है। हालांकि, ऐसा नहीं है। क्या कोई तकनीकी कारण है कि AutoCloseable को लागू करने के लिए स्टैक्स रीडर/लेखक इंटरफेस (या नहीं होना चाहिए) को फिर से लगाया गया था? उनके पास पहले से ही करीबी तरीके हैं, जिनका इरादा AutoCloseable की करीबी विधि से अलग नहीं है।जावा 7

उत्तर

8

आप close() method of AutoCloseable के करीब लग रहे हैं:

इस संसाधन बंद कर देता है, किसी भी अंतर्निहित संसाधनों को त्यागने। यह विधि स्वचालित रूप से प्रयास-संसाधन-संसाधन कथन द्वारा प्रबंधित वस्तुओं पर लागू की जाती है।

या यहां तक ​​कि Closeableclose() method:

इस धारा और विज्ञप्ति किसी भी प्रणाली के साथ जुड़े संसाधनों बंद करता है। यदि स्ट्रीम पहले से बंद है तो इस विधि का आह्वान करने से कोई प्रभाव नहीं पड़ता है।

close() method of XMLStreamReader जबकि कहते हैं:

इस रीडर के साथ जुड़े किसी भी संसाधनों को मुक्त कर देते। यह विधि अंतर्निहित इनपुट स्रोत को बंद नहीं करती है।

दरअसल इनपुट स्रोत Reader जो Closeable इंटरफ़ेस को लागू द्वारा किया जाता है। तो यह पाठक है जो में कोशिश कर सकता है Res -ource-ressource

उदाहरण के लिए:

XMLInputFactory factory = XMLInputFactory.newInstance(); 
    XMLStreamReader reader = null; 
    try (FileReader fr = new FileReader("file.xml")) { //Will close the FileReader 
     reader = factory.createXMLStreamReader(fr); 
     reader.close(); 
    } 
    catch (XMLStreamException ex) { 
     if(reader!=null)try { 
      reader.close(); 
     } catch (XMLStreamException ex1) { 
      Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex1); 
     } 
    } 
+0

मैं व्यक्तिगत रूप से उस कोड को पुन: स्थापित कर दूंगा। अगर कोई अपवाद होता है तो reader.close() अंततः ब्लॉक में होना चाहिए (आपका पकड़ केवल XMLStreamException के लिए है, लेकिन यह एक अनचेक अपवाद भी फेंक सकता है।) मैं पाठक को शून्य के लिए भी चेक को हटा दूंगा और बस दूसरे स्तर पर घोंसला रखूंगा कोशिश करें अंत में अन्य कोशिश ब्लॉक के अंदर। – Trejkaz

0

कोई तकनीकी कारण है कि वे इन चीजों AutoCloseable नहीं बना सकता है। मुझे लगता है कि यह आलसी() के रूप में आलस्य या अपर्याप्त समय के लिए आता है।

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