2012-12-19 12 views
9

Object.toString() JavaDoc का कहना है:जावा मानक पुस्तकालयों को स्ट्रिंग विधियों को लागू क्यों नहीं किया जाता है?

वस्तु के एक स्ट्रिंग प्रतिनिधित्व देता है। आम तौर पर, टूस्ट्रिंग विधि एक स्ट्रिंग देता है जो इस ऑब्जेक्ट को "पाठ रूप से दर्शाती है"।

फिर भी, Collections (सेट, सूचियाँ आदि) एक बहुत ही उपयोगी toString() तरीकों हो सकता है जैसे मानक जावा वर्गों के इतने, यह लागू करने के लिए परेशान नहीं है। क्या इस मूर्खता का कोई कारण है?

या हे, क्या आप इसके बजाय हेक्स स्ट्रिंग पसंद करेंगे? :)

संपादित करें: ओह, यह मेरी आईडीई का उपयोग करने में मेरी विफलता थी। मैंने कार्यान्वयन के बजाय इंटरफ़ेस का पालन किया और मुझे कुछ कारणों से सीधे Object.toString() पर ले गया।

+0

संबंधित: http://stackoverflow.com/q/2329168/334274 – Jivings

+1

कौन से संग्रह वर्ग स्ट्रिंग को लागू नहीं करते हैं? मुझे लगता है कि उनमें से सभी इसे लागू करते हैं (ArrayList, हैश मैप, हैशसेट) –

+0

संग्रह एक उपयोग वर्ग है इसलिए मुझे ToString विधि के लिए कोई अच्छा कारण नहीं है। यदि आपका मतलब जावा में उस मामले में संग्रह इंटरफ़ेस है तो सभी फ़ंक्शंस वर्चुअल हैं इसलिए कार्यान्वयन से टॉस्ट्रिंग को अधिकांश मामलों में ओवरराइड किया जाता है। – gregory561

उत्तर

6

युपीडी:

आप Collection कक्षाएं, तो जवाब होगा मतलब हैं: यह काफी ऐसा नहीं है। Collection कक्षाओं में से कई इस विधि को ओवरराइड करते हैं; उदाहरण के लिए, AbstractCollection वर्ग, जिसका अपना toString कार्यान्वयन है - सभी विरासत कक्षाओं के लिए आम है।

यदि आपका मतलब Collection[s] है, तो इस वर्ग में निजी कन्स्ट्रक्टर है और इसे तत्काल नहीं किया जा सकता है; तो विशेष toString विधि व्यर्थ है।

+3

उन्होंने संग्रहों का उल्लेख किया जो एक उपयोग वर्ग संग्रह नहीं है जो एक इंटरफ़ेस है। – gregory561

+1

@ ग्रेगरी 561, मुझे डर है, लेखक ने एक गलत छाप छोड़ी। – Andremoniy

+0

उस मामले में एक प्रश्न कोई समझ नहीं आता है क्योंकि संग्रह इंटरफ़ेस ऑब्जेक्ट को विस्तार/कार्यान्वित नहीं करता है? जिसमें स्ट्रिंग विधि है। यहां तक ​​कि अगर इस विधि को एक इफेरफेस में कार्यान्वित करना असंभव है – gregory561

2

यदि आप Collections कक्षा के बारे में बात कर रहे हैं, तो यह उपयोगिता वर्ग है, तो स्ट्रिंग() विधि ओवरराइड करना आवश्यक नहीं है। आम तौर पर उपयोगिता वर्गों के मामले में हम रचनाकारों को निजी बनाते हैं और स्थिर तरीके प्रदान करते हैं।

यह भी जांचें कि आप कलेक्शन क्लास का ऑब्जेक्ट नहीं बना सकते हैं क्योंकि इसके निर्माता को निजी बनाया गया है। java.util.Collectionssource, लाइन संख्या 56

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