जावा संग्रह की पैकेजिंग संरचना (java.util) - Iterable java.lang में क्यों बैठती है?


12

नीचे दिए गए आरेख के अनुसार, इंटरफ़ेस को छोड़कर Iterable, सभी शेष निर्माण (इंटरफ़ेस / वर्ग / सार वर्ग) एक ही पैकेज में बैठते हैंjava.util

यहाँ छवि विवरण दर्ज करें

 

पैकेज Iterableमें क्यों बैठता है java.lang?

नोट: इरादा जावा प्रोग्रामिंग के पैकेजिंग पहलू को समझने का है।


आश्चर्य है कि इसे java8 क्यों टैग किया गया है , सभी एपीआई के बारे में यहाँ बहुत पुराने हैं। Iterable को जावा संस्करण 1.5 में पेश किया गया था, 1.2
gnat

जवाबों:


22

जैसा कि इसके javadoc में बताया गया है , इसका उद्देश्य विशेष भाषा के सिंटैक्सIterable का समर्थन करना है :

इस इंटरफ़ेस को लागू करने से किसी ऑब्जेक्ट को "फ़ॉरच" कथन का लक्ष्य बनाया जा सकता है

जैसे, यह लंग पैकेज के अंतर्गत आता है , जो

जावा प्रोग्रामिंग भाषा के डिजाइन के लिए मौलिक कक्षाएं प्रदान करता है।


चित्र पर अन्य वर्गों के हैं JCF और इसलिए, में हैं util पैकेज जो

संग्रह की रूपरेखा सम्‍मिलित है ...


+1। मुझे लगता है, हालांकि, यह Iteratorआदर्श रूप में भी होना चाहिए java.lang, क्योंकि Iterableहै। बेशक, यह java.utilपिछड़े-अनुकूल कारणों के लिए होना चाहिए ("फॉर्च्यूनर" के निर्माण से बहुत पहले ही इसे जेडीके में पेश किया गया था क्योंकि इसने भाषा में एक भूमिका दी है)।
ruakh

@ru Iterator सुविधाजनक है, लेकिन "मौलिक" पैकेज पर जाने के लिए संभवतः बहुत विशिष्ट (विधि चयन और नामकरण) माना जाता था। अपने पूर्ववर्ती के बारे में सोचो गणन है, जो अंततः नहीं निकला रूप में सुविधाजनक के रूप में मूल रूप से सोचा, यह समझदारी है कि यह लैंग पैकेज के लिए जाना नहीं था था
कुटकी

मेरा कहना यह नहीं था कि यह सुविधाजनक है, लेकिन यह कि अब उचित भाषा इस पर निर्भर करती है। (ध्यान दें कि, एक तरफ की निर्भरता से Iterableपर Iterator , java.langपैकेज आम तौर पर में कक्षाओं पर निर्भर नहीं करता java.util।)
ruakh

@ruakh मैं देखता हूँ। यह बहुत अच्छी बात है, धन्यवाद। मैं समझ सकता हूं कि एपीआई डिज़ाइनर Iterable को "ऑब्जेक्ट को निष्पादित करने वाली वस्तु" को उजागर करने के लिए क्यों चाहते थे, लेकिन जिस तरह से उन्होंने ऐसा करने के लिए चुना है वह सुरुचिपूर्ण नहीं लगता है
gnat

6

क्योंकि बहुत सारी चीजें इंटरफ़ेस को लागू करती हैं या इसे उप इंटरफ़ेस के रूप में विस्तारित करती हैं।

कार्यान्वयन कक्षाएं हैं:

  • java.util
    • AbstractCollection
    • AbstractList
    • AbstractQueue
    • AbstractSequentialList
    • AbstractSet
    • ...
    • समवर्ती
      • ArrayBlockingQueue
      • ConcurrentLinkedDeque
      • ...
  • java.beancontext
    • BeanContextServicesSupport
    • BeanContextSupport
    • ...
  • java.sql
    • BatchUpdateException
    • DataTruncation
    • ...
  • javax.management
    • AttributeList
  • javax.print.attribute.standard
    • JobStateReasons
    • ...
  • ...

यह बहुत बड़ी सूची है। और यह वहाँ से बाहर पैकेज के सभी प्रकार पर छूता है।

इसके अलावा, आप परिपत्र पैकेज निर्भरता को कम करना चाहते हैं । यदि पैकेज ए में एक वर्ग पैकेज बी में एक वर्ग पर निर्भर करता है जो पैकेज ए में वर्ग पर निर्भर करता है, तो आपको एक परिपत्र निर्भरता मिली है। वे हमेशा खराब नहीं होते हैं कि वे मौजूद हों - लेकिन वे अन्य परिपत्र निर्भरता की ओर ले जाते हैं और यह एक बुरी बात हो सकती है। यह अपने आप से बुरा नहीं है, लेकिन यह एक डिजाइन गंध है जो इंगित करता है कि दो वर्गों या पैकेजों के बीच युग्मन बहुत तंग है। यह तकनीकी ऋण संचय की शुरुआत है।

इसका समाधान यह है कि "हां, Iterable इंटरफ़ेस कुछ ऐसा है जो कि विभिन्न प्रकार के वर्गों और पैकेजों में पूरे जावा और javax संरचना पर निर्भर है। यह भाषा पुस्तकालयों - जावा के सबसे आधार में होना चाहिए। .lang। "

और वह वह जगह है जहां तुम इसे पाओगे।

संबंधित पढ़ना:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.