2011-11-03 14 views
6

के लिए println/प्रिंट विधि कैसे बनाएं I जावा में एक प्रोजेक्ट पर काम कर रहा हूं जिसके लिए मुझे कुछ 'कंटेनर' कक्षाएं बनाने की आवश्यकता है, यदि आप करेंगे।कस्टम क्लास

:

public class Pair{ 

    Object KEY; 
    Object VALUE; 

    public Pair(Object k, Object v) 
    { 
     KEY = k; 
     VALUE = v; 
    } 

    public Object getKey() 
    { return KEY; } 
    public Object getValue() 
    { return VALUE; } 
} 

(। कृपया ध्यान दें, इस गंभीर रूप से सरल है और मैं उचित सेट का उपयोग कर रहा/अंतिम संस्करण में तरीकों मिल)

मेरा प्रश्न यह है: यहाँ एक का एक सरल संस्करण है

जब पैरामीटर के रूप में एक ArrayList साथ println विधि, उदाहरण के लिए बुला:

ArrayList<String> arr = new ArrayList<String>(); 
arr.add("one"); 
arr.add("two"); 
System.out.println(arr); 

जावा स्वचालित रूप से सही ढंग से प्रत्येक ArrayList के 'नोड' या तत्व मुद्रित करने के लिए कैसे जानता है।

क्या प्रिंटल विधि को सही ढंग से मेरे जोड़े वर्ग को प्रिंट करने की अनुमति देने के लिए कोई तरीका लिखने का कोई तरीका है?

उत्तर

12

आप toString विधि ओवरराइड और आप क्या चाहते हैं की एक स्ट्रिंग प्रतिनिधित्व वापस जाने के लिए की आवश्यकता होगी।

उदाहरण के लिए

तो:

public class Pair { 

    Object key; 
    Object value; 

    public Pair(Object k, Object v) 
    { 
     key = k; 
     value = v; 
    } 

    public Object getKey() { 
     return key; 
    } 

    public Object getValue() { 
     return value; 
    } 

    public String toString() { 
     return "Key: " + getKey() + ", Value: " + getValue(); 
    } 
} 

से आप निम्न कर सकते हैं:

List<Pair> pairs = new ArrayList<Pair>(); 
pairs.Add(new Pair("pair1key", "pair1value")); 
pairs.Add(new Pair("pair2key", "pair2value")); 

for (Pair p : pairs) { 
    System.out.println(p); 
} 
+0

बिल्कुल सही। धन्यवाद! – Proxy404

4

आप toString() ओवरराइड करने के लिए की जरूरत है:

public class Pair 
{ 
    KeyObject key; 
    ValueObject value; 

    public Pair(KeyObject k, ValueObject v) 
    { 
     key = k; 
     vale = v; 
    } 

    // ... 

    @Override 
    public String toString() 
    { 
     return "Key: " + key.getKey() + " - Vlaue: " value.getValue(); 
    } 
} 
+1

'कहना चाहिए सार्वजनिक स्ट्रिंग toString() ' – jxmorris12

1

आप एक toString() विधि को परिभाषित करना होगा। इसे स्वचालित रूप से System.out.println(Object o) द्वारा बुलाया जाता है। ArrayList कक्षा में ऐसी ओवरराइड toString() विधि है जो अच्छी तरह से स्वरूपित प्रतिनिधित्व प्रदान करती है।

असल में, आपकी परिभाषा के साथ Object.toString ओवरराइड करना आवश्यक है।

1

आप अपनी कस्टम कक्षा की toString() विधि को ओवरराइड कर सकते हैं और जो भी जानकारी चाहते हैं उसे प्रिंट कर सकते हैं।

@Override 
public String toString() { 

    return .....; 
    } 
1

आप ArrayList का विस्तार करने और toString() विधि रद्द कर सकते थे:

public class MyArrayList<T> extends ArrayList<T> { 
    @Override 
    public String toString() { 
     // format your print here... 
    } 
} 

लेकिन इस overkill है। मैं सिर्फ प्रिंट उपयोगिता विधि लिखूंगा।

public class MyUtils { 
    public String toString(ArrayList<? extends Object>) { 
     // format your print here; 
    } 
} 
0
/** demo print of an ArrayList of Address objects using overridden toString() method */ 

import java.util.ArrayList; 

public class Address { 

    // simple address fields (incomplete) 
    private String addrLine1; 
    private String city; 
    private String state; 

    // run sample program 
    public static void main(String[] args) { new Address().run(); } 

    public void run() { 
     // instantiate example Address records 
     Address addr1 = new Address(); 
     Address addr2 = new Address(); 

     // add example field data 
     addr1.addrLine1 = "123 This St."; 
     addr1.city = "Big Tuna"; 
     addr1.state = "Texas"; 
     addr2.addrLine1 = "456 That St."; 
     addr2.city = "Phoenix"; 
     addr2.state = "Arizona"; 

     // create ArrayList<Address>, add instances 
     ArrayList<Address> addrArray = new ArrayList<>(); 
     addrArray.add(addr1); 
     addrArray.add(addr2); 

     // print Address instance fields in addrArray 
     for (Address addr : addrArray) 
      System.out.println(addr); 
    } // end run() 

    // overriding toString() method 
    @Override public String toString() 
     return "\n" + addrLine1 + "\n" + city + ", " + state; 

} // end class Address 

प्रिंटों:

123 यह सेंट
बिग ट्यूना, टेक्सास

456 यही कारण है कि सेंट
गोवा, दमन

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