2012-05-24 14 views
53

थोड़ा बेवकूफ लगता है, लेकिन मुझे अपनी toString() विधि पर मदद चाहिए और यह बहुत ही आकर्षक है। मैंने ऑनलाइन देखने की कोशिश की क्योंकि टॉस्ट्रिंग वह है जहां यह खराब हो रहा है और "बच्चे कन्स्ट्रक्टर # 2 नहीं ढूंढ रहा है" भले ही यह वहां है और मैं कुछ और भी करूँगा और यह काम नहीं करेगा। ठीक है कि एक बहुत तो यहाँ था मेरे कोड है:जावा में ठीक से toString() को ओवरराइड कैसे करें?

import java.util.*; 
    class Kid { 
     String name; 
     double height; 
     GregorianCalendar bDay; 

     public Kid() { 
     this.name = "HEAD"; 
     this.height = 1; 
     this.bDay = new GregorianCalendar(1111,1,1); 
     } 

     public Kid (String n, double h, String date) { 
     // method that toString() can't find somehow 
     StringTokenizer st = new StringTokenizer(date, "/", true); 
     n = this.name; 
     h = this.height; 
     } 

     public String toString() { 
     return Kid(this.name, this.height, this.bDay); 
     } 
    } //end class 

ठीक है तो ऊपर मेरी toString (मुझे पता है, मेरे तीसरे पैरामीटर बंद है, होना चाहिए एक स्ट्रिंग) बंद है। अगर मैं तीसरी चीज़ के लिए एक मूल्य को हार्डकोड करता हूं तो यह खराब हो जाता है और कहता है कि यह इसे (ऊपर ऊपर) नहीं ढूंढ सकता है। तो मैं तारीख कैसे प्राप्त कर सकता हूं और इसे तोड़ सकता हूं?

कक्षा इस बुला

नीचे
class Driver { 
    public static void main (String[] args) { 
     Kid kid1 = new Kid("Lexie", 2.6, "11/5/2009"); 
     System.out.println(kid1.toString()); 
    } //end main method 
} //end class 

मैं कई निर्माताओं शोध करने की कोशिश की और यह वास्तव में मदद नहीं की है। मैंने toString() विधियों का शोध करने का प्रयास किया, और पिछले टूस्टिंग() विधियों के तर्क का उपयोग करने का प्रयास किया जो मैंने पिछले बनाया था लेकिन यह बिल्कुल नया है इसलिए यह कभी काम नहीं करता है।

सहायता?

+3

कृपया कोड पोस्ट करें जो वास्तव में संकलित होगा। आपकी 'toString()' विधि स्ट्रिंग नहीं लौटाती है, और आप इस तरह के कन्स्ट्रक्टर को कॉल नहीं कर सकते हैं। यह स्पष्ट नहीं है कि आप क्या हासिल करने की कोशिश कर रहे हैं। कृपया http://tinyurl.com/so-hints पढ़ें और अपने प्रश्न को स्पष्ट करें। –

+0

वसंत के ToStringCreator (https://github.com/SpringSource/spring-framework/tree/master/spring-core/src/main/java/org/springframework/core/style) नौकरी बहुत अच्छी तरह से करता है। – Ritesh

उत्तर

84

toStringString वापस करना है।

public String toString() { 
    return "Name: '" + this.name + "', Height: '" + this.height + "', Birthday: '" + this.bDay + "'"; 
} 

मैं तुम्हें toString विधि उत्पन्न करने के लिए अपने आईडीई की सुविधाओं का उपयोग कर सुझाव देते हैं। इसे हाथ से कोड न करें।

उदाहरण के लिए, ग्रहण, इसलिए यदि आप बस स्रोत कोड पर राइट क्लिक करें और चुनें Source > Generate toString

+1

धन्यवाद! बहुत मदद की! – user1283885

+0

यह अच्छा अभ्यास नहीं है, क्योंकि आप स्ट्रिंग कॉन्सटेनेशन का उपयोग कर रहे हैं। – Amit

+0

स्ट्रिंगबिल्डर ऐसी स्थिति में बेहतर विकल्प है। – Amit

4

आप toString में नई वस्तु बनाने कर सकते हैं कर सकते हैं()। का उपयोग

return "Name = " + this.name +" height= " + this.height; 
बजाय

return Kid(this.name, this.height, this.bDay); 

आप वापसी स्ट्रिंग को बदलने के रूप में आवश्यक हो सकता है। बदले में तारीख को स्टोर करने के अन्य तरीके हैं।

3

आप एक निर्माता फोन नहीं कर सकते हैं जैसे कि यह एक सामान्य तरीका था, आप केवल यह new साथ फोन एक नया वस्तु बनाने के लिए कर सकते हैं:

Kid newKid = new Kid(this.name, this.height, this.bDay); 

लेकिन अपने toString() विधि से एक नई वस्तु का निर्माण वह नहीं है जो आप करना चाहते हैं।

1

निम्नलिखित कोड एक नमूना है। आईडीई आधारित रूपांतरण का उपयोग करने के बजाय, इसके आधार पर प्रश्न, क्या कार्यान्वित करने का एक तेज़ तरीका है ताकि भविष्य में परिवर्तन हो जाएं, हमें मूल्यों को बार-बार संशोधित करने की आवश्यकता नहीं है?

@Override 
    public String toString() { 
     return "ContractDTO{" + 
       "contractId='" + contractId + '\'' + 
       ", contractTemplateId='" + contractTemplateId + '\'' + 
       '}'; 
    } 
6

जावा toString() विधि

आप एक स्ट्रिंग के रूप में किसी भी वस्तु का प्रतिनिधित्व करना चाहते हैं, toString() विधि अस्तित्व में आता है।

ToString() विधि ऑब्जेक्ट की स्ट्रिंग प्रस्तुति देता है।

यदि आप किसी ऑब्जेक्ट को प्रिंट करते हैं, तो जावा कंपाइलर आंतरिक रूप से ऑब्जेक्ट पर toString() विधि को आमंत्रित करता है।इसलिए ToString() विधि को ओवरराइड करना, वांछित आउटपुट देता है, यह ऑब्जेक्ट आदि की स्थिति हो सकता है। आपके कार्यान्वयन पर निर्भर करता है। जावा toString() विधि

वस्तु वर्ग की विधि toString() अधिभावी तक की

लाभ, हम वस्तु के मूल्यों लौट सकते हैं, तो हम ज्यादा कोड लिखने की जरूरत नहीं है। बिना toString() विधि

आउटपुट

class Student{ 
int id; 
String name; 
String address; 

Student(int id, String name, String address){ 
this.id=id; 
this.name=name; 
this.address=address; 
} 

public static void main(String args[]){ 
    Student s1=new Student(100,”Joe”,”success”); 
    Student s2=new Student(50,”Jeff”,”fail”); 

    System.out.println(s1);//compiler writes here s1.toString() 
    System.out.println(s2);//compiler writes here s2.toString() 
} 
} 

Output:[email protected] 
     [email protected] 

आप में ऊपर के उदाहरण # 1 देख सकते हैं। प्रिंटिंग एस 1 और एस 2 ऑब्जेक्ट्स के हैशकोड वैल्यू प्रिंट करता है लेकिन मैं इन ऑब्जेक्ट्स के मान प्रिंट करना चाहता हूं। चूंकि जावा कंपाइलर आंतरिक रूप से toString() विधि को कॉल करता है, इस विधि को ओवरराइड करने से निर्दिष्ट मान वापस आ जाएंगे। यह नीचे दिए गए उदाहरण के साथ समझते हैं:

Example#2 

Output with overriding toString() method 

class Student{ 
int id; 
String name; 
String address; 

Student(int id, String name, String address){ 
this.id=id; 
this.name=name; 
this.address=address; 
} 

//overriding the toString() method 
public String toString(){ 
    return id+" "+name+" "+address; 
} 
public static void main(String args[]){ 
    Student s1=new Student(100,”Joe”,”success”); 
    Student s2=new Student(50,”Jeff”,”fail”); 

    System.out.println(s1);//compiler writes here s1.toString() 
    System.out.println(s2);//compiler writes here s2.toString() 
} 
} 

Output:100 Joe success 
     50 Jeff fail 

ध्यान दें कि toString() ज्यादातर जावा में बहुरूपता की अवधारणा से संबंधित है। में, ग्रहण, toString() पर क्लिक करने का प्रयास करें और उस पर राइट क्लिक करें। फिर, ओपन घोषणा पर क्लिक करें और देखें कि सुपरक्लास टूस्ट्रिंग() कहां से आता है।

1

खैर वास्तव में आप कुछ इस तरह वापस जाने के लिए क्योंकि toString एक स्ट्रिंग वापस जाने के लिए

public String toString() { 
return "Name :" + this.name + "whatever :" + this.whatever + ""; 
} 

है और आप वास्तव में कुछ constructer में गलत करते हैं आप चर उपयोगकर्ता नाम करने के लिए सेट करते समय आप की जरूरत सेट की आवश्यकता होगी उलटी गंगा बहाना। आपको नहीं करना चाहिए क्या

n = this.name 

आप

this.name = n 

होप्स को क्या करना चाहिए इस धन्यवाद

1

कक्षा में एक नया स्ट्रिंग ऑब्जेक्ट बनाने और बताए द्वारा हम भी इस तरह लिख सकते हैं मदद करता है यह हम कभी भी कन्स्ट्रक्टर में चाहते हैं और लौटने की विधि में लौटते हैं जो

public class Student{ 
int id; 
String name; 
String address; 
String details; 
Student(int id, String name, String address){ 
this.id=id; 
this.name=name; 
this.address=address; 
this.details=id+" "+name+" "+address; 
} 

//overriding the toString() method 
public String toString(){ 
    return details; 
} 
public static void main(String args[]){ 
    Student s1=new Student(100,"Joe","success"); 
    Student s2=new Student(50,"Jeff","fail"); 

    System.out.println(s1);//compiler writes here s1.toString() 
    System.out.println(s2);//compiler writes here s2.toString() 
} 
} 
संबंधित मुद्दे