2013-05-31 7 views
8

मैंने जावा में क्रमबद्धता और अन्य भाषाओं में थोड़ी सी भी पढ़ना शुरू कर दिया है, लेकिन अगर मेरे पास एक सामान्य वर्ग है और मैं इसे फाइल करने के लिए एक उदाहरण सहेजना चाहता हूं।जावा में जेनेरिक क्लास को क्रमबद्ध करने के लिए कैसे?

कोड उदाहरण

public class Generic<T> { 
    private T key; 
    public Generic<T>() { 
    key = null; 
    } 
    public Generic<T>(T key) { 
    this.key = key; 
    } 
} 

क्या वस्तु के इस प्रकार को बचाने के लिए सबसे अच्छा तरीका है? (बेशक वहाँ मेरा असली ceneric कक्षा में अधिक है, लेकिन मैं सिर्फ वास्तविक विचार सोच रहा हूँ।)

+3

बस किसी भी अन्य वर्ग के रूप में: यह 'Serializable' इंटरफ़ेस' लागू करना:) ' – sp00m

+0

@ sp00m: कभी कभी यह वर्ग बदलने के लिए संभव नहीं है। शायद यहां मामला नहीं है;) – Burkhard

उत्तर

17

आप जरूरत हमेशा की तरह सामान्य वर्ग Serializable बनाने के लिए।

public class Generic<T> implements Serializable {...}

क्षेत्रों सामान्य प्रकार का उपयोग कर की घोषणा की जाती हैं, तो आप कि वे Serializable को लागू करना चाहिए निर्दिष्ट करने के लिए कर सकते हैं।

public class Generic<T extends Serializable> implements Serializable {...}

कृपया यहाँ असामान्य जावा वाक्य रचना के बारे में पता होना।

public class Generic<T extends Something & Serializable> implements Serializable {...}

+0

Ty मैं इस जवाब को प्राथमिकता देता हूं क्योंकि यह मेरे लिए मेरी कक्षा में जोड़ना आसान है ... मेरे पास यह सब कुछ है ... serializable लागू करता है, लेकिन जब मैं ऑब्जेक्टऑटपुटस्ट्रीम को सहेजने की कोशिश करता हूं। मेरा कार्यक्रम बस जम जाता है। – Leolian

+0

'सीरियलज़ेबल' को कार्यान्वित करने से इंसप्स्यूलेशन और जानकारी छिपी हुई है; सभी निजी और पैकेज-निजी सदस्य कक्षा के निर्यात किए गए एपीआई का हिस्सा बन जाते हैं। यह संभावित सुरक्षा भेद्यताएं पेश करता है और कक्षा को अधिक नाजुक बना सकता है। 'सीरियलज़ेबल 'को लागू करने का निर्णय बहुत सावधानी से किया जाना चाहिए और धारावाहिक रूप सावधानी से डिजाइन किया जाना चाहिए (प्रभावशाली जावा, द्वितीय एड)। – scottb

0

आप नहीं चाहते हैं (या नहीं कर सकते हैं) Serializable इंटरफ़ेस को लागू है, तो आप Xstream उपयोग कर सकते हैं। यहां एक छोटा tutorial है।

आपके मामले में:

XStream xstream = new XStream(); 
Generic<T> generic = ...;//whatever needed 
String xml = xstream.toXML(generic); 
//write it to a file (or use xstream directly to write it to a file) 
+0

'सीरियलज़ेबल' को लागू करने का एक और विकल्प 'बाहरी' को लागू करना है (जो स्वयं 'सीरियलज़ेबल' बढ़ाता है)। – scottb

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