2012-07-26 16 views
10

मैं एक जावा सेम वर्ग Person 3 चर युक्त है का उपयोग कर जावा बीन मुद्रित करने के लिए कैसे:पूरी तरह से प्रतिबिंब या किसी अन्य उपयोगिता

  • नाम (स्ट्रिंग)
  • उम्र (स्ट्रिंग)
  • पता (वस्तु) ।

    • सड़क
    • door_no
    • शहर

    मैं एक उपयोगिता जो Person में सभी चर मुद्रित करना चाहिए चाहते हैं:

Address 3 चर होते हैं।

इसका मतलब है कि इसे Person & प्रिंट करना चाहिए Address उसमें निहित वस्तु।

मैं एक hashmap बना सकते हैं और चर नाम JSP में प्रतिबिंब और प्रिंट कुंजी/मान UI का उपयोग & मूल्यों डाल लेकिन मुद्दा मैं hashmap में चर/मूल्य जोड़ने Address के लिए प्रतिबिंब आवेदन करना है कर सकते हैं।

क्या ऐसा करने के लिए कोई उपयोगिता उपलब्ध है?

+4

क्या यह नहीं है कि इन वस्तुओं पर '#toString()' क्या करना है? – Romain

उत्तर

27

आप Apache Commons से ToStringBuilder का उपयोग कर सकते हैं।

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 

अधिक विवरण::

इस विधि के लिए एक विशिष्ट मंगलाचरण दिखाई देगा:

प्रलेखन से

इस वर्ग के लिए एक अच्छा और लगातार toString सक्षम बनाता है () किसी वर्ग या वस्तु के लिए बनाया जाना है।

सभी प्रकार लगातार nulls लगातार outputting सरणियों और बहु-आयामी सरणियों विस्तार स्तर वस्तुओं और संग्रह वर्ग पदानुक्रम इस का उपयोग करने के निपटने के लिए नियंत्रित किया जा करने के लिए सक्षम से निपटने से निपटने फ़ील्ड नामों की इजाजत दी: इस वर्ग द्वारा प्रक्रिया को सरल करना है वर्ग लिखने कोड इस प्रकार है:

public class Person { 
    String name; 
    int age; 
    boolean smoker; 

    ... 

    public String toString() { 
    return new ToStringBuilder(this). 
     append("name", name). 
     append("age", age). 
     append("smoker", smoker). 
     toString(); 
    } 
} 

वैकल्पिक रूप से, वहाँ एक विधि का परीक्षण करने के क्षेत्रों का निर्धारण करने के प्रतिबिंब का उपयोग करता है है। चूंकि ये फ़ील्ड आमतौर पर निजी होते हैं, विधि, प्रतिबिंब टॉस्ट्रिंग, फ़ील्ड की दृश्यता को बदलने के लिए AccessibleObject.setAccessible का उपयोग करता है। यह एक सुरक्षा प्रबंधक, के तहत विफल हो जाएगा जब तक उपयुक्त अनुमतियां सही तरीके से सेट न हों। यह स्पष्ट रूप से परीक्षण से धीमा धीमा है।

public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
} 
+0

आप अपने toString विधि के बाहर ToStringBuilder का उपयोग कर सकते हैं। ToStringBuilder.reflectionToString (अन्य ऑब्जेक्ट) –

+1

आप इस तरह उपयोग कर सकते हैं: 'ToStringBuilder.reflectionToString (ऑब्जेक्ट पुनर्प्राप्त)' जैसे जेफ ने समझाया –

+0

@ फ्रांसिस्कोस्पेथ क्या होगा यदि आपके पास सूची चर है? सूची शौक; आप उस स्ट्रिंग को कैसे सेट कर सकते हैं? – Jesse

1

आप प्रिंट करने की आप जो कुछ भी चाहते toString विधि लागू कर सकते हैं, या आप अपाचे कॉमन्स ToStringBuilderhttp://commons.apache.org/lang/api-2.3/org/apache/commons/lang/builder/ToStringBuilder.html और उसके reflectionToString विधि का उपयोग कर सकते हैं। मुझे विश्वास नहीं है कि यह गुणों (जैसे उदाहरण के लिए पते) के माध्यम से पुन: कार्य करेगा, लेकिन यदि आप स्ट्रीट, दरवाजा संख्या और शहर के साथ मुद्रित पता देखना चाहते हैं, तो उस जानकारी को प्रिंट करने के लिए toString विधि लागू करें।

1

आप जैक्सन JSON serializer इस उद्देश्य के लिए उपयोगी पा सकते हैं। जैक्सन पुस्तकालय पहले से ही आपके ढेर का हिस्सा हो सकता है। यदि नहीं, तो नीचे आवश्यक निर्भरताएं पाएं।

private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper(); 
public static String toStringUsingJackson(final Object object) { 
    try { 
     return OBJECT_MAPPER_SINGLETON.writeValueAsString(object); 
    } catch (final JsonProcessingException e) { 
     return String.valueOf(object); 
    } 
} 

नमूना उत्पादन:

{ "नाम": "जॉन डो", "उम्र": 42}

आवश्यक Maven/Gradle निर्भरता:

  • जैक्सन-कोर, groupId = com.fasterxml.jackson.core
  • जैक्सन-डाटाबेस, groupId = com.fasterxml.jackson.core
संबंधित मुद्दे