Closeable
इंटरफेस जावा 5 में पेश किया गया था जबकि AutoCloseable
इंटरफेस जावा 7 में try-with-resources
कथन के साथ आया था। Closeable
विस्तारित करता है (जावा 7 के बाद से) Autocloseable
इंटरफ़ेस।जावा में कैसे है बंद करने योग्य इंटरफ़ेस की नज़दीकी() विधि की idempotence सुनिश्चित किया?
पुस्तक में ओसीए/ओसीपी जावा SE 7 - प्रोग्रामर मैं & द्वितीय अध्ययन गाइड यह पेज 399 पर कहते हैं:
क्या होगा अगर happends हम
close()
एकाधिक समय कहते हैं? निर्भर करता है।AutoCloseable
को लागू करने वाले वर्गों के लिए, कार्यान्वयन को बेवकूफ होना आवश्यक है। जिसका अर्थ है कि आप पूरे दिनclose()
पर कॉल कर सकते हैं और दूसरी बार और उससे भी कुछ भी नहीं होगा। [...]Closeable
को लागू करने वाली कक्षाओं के लिए ऐसी कोई गारंटी नहीं है।
तो इस पाठ के अनुसार, AutoCloseable
के कार्यान्वयन idempotent जाने की जरूरत है, और Closeable
नहीं के उन। अब जब मैं AutoCloseable
interface at docs.oracle.com के प्रलेखन पर एक नजर है, यह कहते हैं:
ध्यान दें कि
Closeable
कीclose
विधि के विपरीत, ये करीब विधि idempotent किए जाने की आवश्यकता नहीं है। दूसरे शब्दों में, इसclose
विधि को एक से अधिक बार कॉल करने के लिए कुछ दृश्य दुष्प्रभाव हो सकते हैं,Closeable.close
के विपरीत, जिसे एक से अधिक बार बुलाया जाने पर कोई प्रभाव नहीं पड़ता है।
अब यह पुस्तक में जो लिखा गया है उसके विपरीत है। मेरे पास दो प्रश्न हैं:
(1) सही क्या है? Docs.oracle.com या पुस्तक पर डॉक्टर? दो इंटरफेस में से कौन सा बेवकूफता की आवश्यकता है?
(2) कोई फर्क नहीं पड़ता कि किसके लिए बेवकूफ होना चाहिए - क्या मैं सही हूं कि जावा वास्तव में यह सुनिश्चित करने के लिए कोई रास्ता नहीं है कि यह बेवकूफ है? यदि ऐसा है, तो close
विधि की "आवश्यकता" idempotent होने की विधि है कि प्रोग्रामर करना चाहिए, लेकिन मैं कभी भी यह सुनिश्चित नहीं कर सकता कि इंटरफ़ेस का उपयोग करने वाले किसी ने वास्तव में ऐसा किया है, है ना? इस मामले में बेवकूफी केवल ओरेकल का सुझाव है, सही?
2) इसका मतलब क्या है: "जावा वास्तव में यह सुनिश्चित करने के लिए कोई रास्ता नहीं है कि यह बेवकूफ है"। भाषा करता है, जैसे अंतिम बुलियन ध्वज संकेत विधि को बुलाया जाता है। दूसरी तरफ, कंपाइलर यह सुनिश्चित करने के लिए निकट कार्यान्वयन के किसी प्रकार का सत्यापन नहीं करता है कि कार्यान्वयन बेवकूफ है। – John
के बारे में (1): पुस्तक में वास्तव में एक गलती है, इस पृष्ठ पर इरेटा पाया गया है जहां इसका उल्लेख है: http://www.coderanch.com/t/641206/ocajp/certification/Errata-OCA-OCP- जावा-एसई –
@ जॉन: मुझे समझ में नहीं आता कि आपका बूलियन ध्वज के साथ क्या मतलब है। मैं पूरी तरह से बेवकूफ संपत्ति के बारे में बात कर रहा हूं। मेरा अनुमान है कि बेवकूफ संपत्ति का सत्यापन नहीं किया जाता है और यहां तक कि ऐसा करना संभव नहीं होगा। –