2012-07-08 23 views
14

मैं the docs पढ़ रहा था और इसे देखा। कभी कल्पना नहीं की। विवरण:क्या स्ट्रिंग की टूस्ट्रिंग() विधि का कोई व्यावहारिक उद्देश्य है?

यह ऑब्जेक्ट (जो पहले से ही एक स्ट्रिंग है!) स्वयं वापस आ गया है।

सम्मेलनों भरने या कंप्यूटिंग संसाधनों का उपयोग करते हुए इसके अलावा, क्या एक .toString() जावा में एक String पर क्या करता है कि String ही नहीं होगा का उपयोग कर? यह java.lang.Object कक्षा से .toString() का उत्तराधिकारी क्यों नहीं है?

संपादित करें:

मुझे समझ में बहुरूपता की परिस्थितियों में एक खुद toString() विधि अस्तित्व के लिए के बाद से यह overrode है कि अपनी माता-पिता की toString()। मैं पहले प्रश्न में क्या जानना चाहता हूं कि अगर कोई ऐसी स्थिति है जहां आपको stringVariable/"String value" और stringVariable.toString()/"String value".toString() का उपयोग करने के बीच कुछ अलग मिलेगा।

पूर्व। जीआर .: System.out.println(stringVariable.toString()); जैसे एक आउटपुट ऑपरेशन या stringVariable = "String value".toString(); जैसे मान असाइनमेंट।

+0

हाय वहाँ। अगर आपको निलंबन के बाद इसे नहीं देखा जाता है, तो जॉन के जवाब पर जॉनडोडो से एक टिप्पणी है। एफडब्ल्यूआईडब्ल्यू, यदि आप वापस आते हैं, तो कृपया सभी अस्वीकार्य उत्तरों को बहाल करने पर विचार करें - अगर वे उस समय स्वीकार करने के लिए पर्याप्त थे, तो उन सहायक लोगों को उनके नियंत्रण के बाहर किसी घटना के लिए दंडित किया जा रहा है। – halfer

उत्तर

34

सम्मेलनों को भरने या कंप्यूटिंग संसाधनों का उपयोग करने के अलावा, जावा में एक .toString() स्ट्रिंग पर क्या करता है जो स्ट्रिंग का उपयोग स्वयं नहीं करेगा?

इसका मतलब है कि यह पॉलिमॉर्फिक नामक उचित परिणाम देता है।

यह क्लास java.lang.Object से .toString() का उत्तराधिकारी क्यों नहीं है?

क्योंकि वह एक ही परिणाम देना नहीं होता है, और लगभग निश्चित रूप से नहीं परिणाम वांछित।

Object.toString() वस्तु का एक उचित उपयोगी स्ट्रिंग प्रतिनिधित्व देने के लिए है। Object कार्यान्वयन प्रकार और मूल्य के बारे में जानकारी देता है जिसका उपयोग क्रूड पहचान संकेतों के लिए किया जा सकता है (नैदानिक ​​रूप से उपयोगी है, लेकिन यह सब कुछ है)। यह स्पष्ट रूप से स्ट्रिंग के लिए सबसे उपयोगी स्ट्रिंग प्रस्तुति है - स्ट्रिंग स्वयं ही है।

जब मैं कहूंगा कि यह एक दया है कि toString काफी ऊनी तरह से परिभाषित किया गया है (यह स्पष्ट नहीं है परिणाम मशीन, डेवलपर या उपयोगकर्ता खपत के लिए है या नहीं) है, यह मेरे लिए स्पष्ट मानना ​​है कि एक String होगा कार्यान्वयन में खुद को वापस करें।

+5

प्रभावी जावा आइटम 10 'toString() 'को पूरी तरह से निर्दिष्ट करने से बचने के कुछ कारणों पर चर्चा करता है: क्योंकि कोई व्यक्ति _sevitably_ तय करेगा कि इसे पार्स करना अच्छा विचार है। –

+1

@TrevorTrovalds: क्या प्रलेखन पहले से ही इसका उत्तर नहीं देता है? यह "इस ऑब्जेक्ट" को लौटाता है - इसलिए नहीं, ऐसी कोई स्थिति नहीं है जहां 'foo' और' foo.toString() 'का उपयोग एक अलग परिणाम देगा जहां' foo' 'स्ट्रिंग' के लिए एक गैर-शून्य संदर्भ है। –

+2

@ ट्रेवर ट्रावाल्ड्स: उम, आईएसएच - हालांकि मैं * उस उद्देश्य के लिए इसका उपयोग नहीं करूंगा। –

0

जावा में toString विधि कार्यान्वित करना Object की toString विधि को ओवरराइड करके किया जाता है। जावा toString() विधि का उपयोग तब किया जाता है जब हमें ऑब्जेक्ट की स्ट्रिंग प्रस्तुति की आवश्यकता होती है। इसे Object कक्षा में परिभाषित किया गया है। Object के String का प्रतिनिधित्व करने के लिए इस विधि को ओवरराइड किया जा सकता है।

0

व्यावहारिक उदाहरण:

public abstract class MetadataProcessor { 

protected void processMetadata() {  
    Map<String, Object> metadata = getMetadata(); 
    for(String key : metadata.keySet()) { 
     if(metadata.get(key) instanceof Date) { 
     processDate(metadata.get(key)); 
    } else { //String or any other object type 
     processString(metadata.get(key).toString()); 
    } 
} 

private void processDate(Date date) { 
    (...) 
} 

private void processString(String string) { 
    (...) 
} 

/** 
* contains document's metadata, values must be String or Date 
**/ 
protected abstract Map<String, Object> getMetadata(); 
} 

तो स्ट्रिंग की।toString() स्ट्रिंग को वापस नहीं लौटाएगा, उपरोक्त कोड में एक अतिरिक्त if(foo instanceof String) की आवश्यकता होगी।