2013-07-03 12 views
5

मैं पूरे जावा जेनेरिक विषय को समझने की कोशिश कर रहा हूं।जावा जेनेरिक विधि के पैरामीटर

अधिक विशेष रूप से इस मुद्दे:

public class Node<E>{ 
    private E data; 
    public Node(E data){ 
     this.data=data; 
    } 
    public E get(){ 
     return this.data; 
    } 
    public void set(E data){ 
     this.data=data; 
    } 
} 

मैं कैसे जोड़ सकते हैं एक "फैली" वाइल्डकार्ड निर्दिष्ट करने सेट कि विधि ई या ई के किसी भी इनहेरीट वर्ग (प्राप्त कर सकते हैं जो मामले नोड होगा में पैरामीटर का एक उन्नत संस्करण पकड़ो)।

या यह काम करेगा, भले ही मैं इसे छोड़ दूं?

(मैं थोड़ा सामान्य प्रकार के अपरिवर्तनीय पहलू के साथ भ्रमित हो सकता है।)

धन्यवाद!

+3

यह पहले से ही वही करेगा जो आप चाहते हैं ... –

+0

मैंने सवाल को कम किया। यदि आप अपने आप को थोड़ा सा काम करते हैं तो यह आसानी से उत्तरदायी है। आपको Google की भी आवश्यकता नहीं है, बस किसी भी जावा आईडीई में ctrl-space का उपयोग करें और अपने लिए देखें। – Dariusz

+0

@Dariusz आप जो भी चाहें करने के लिए स्वतंत्र हैं। बात यह है कि, कभी-कभी कोड "काम" करेगा, भले ही आप वास्तव में नहीं जानते कि यह क्यों काम करता है या कितना अच्छा काम करता है। यही कारण है कि मैंने यहां पूछा। – Paz

उत्तर

3

आपकी कक्षा पहले से ही आपको जो चाहिए वह कर रही है। उदाहरण के द्वारा प्रदर्शन करते हैं। मान लें कि आपने नोड बनाया है (NumberInteger, Long आदि की सुपर क्लास है);

Node<Number> numberNode = new Node<Number>(1); 

तुम भी

numberNode.set(new Integer(1)); 
numberNode.set(new Long(1)); 
3

आपने अपनी कक्षा Node<E> घोषित की है जहां यह पहले से ही E की विरासत कक्षा को स्वीकार करता है।

+2

जेनिक्स के रूप में उत्तीर्ण संग्रह के साथ यह अलग है? क्योंकि जब हम 'कुछ विधि (ArrayList ) लिखते हैं' तो टाइप 'ई' के साथ केवल सरणी सूची ही पास की जा सकती हैं। –

+2

@ प्रसाद ख़ारकर अच्छा दिख रहा है! हाँ वे अलग हैं। – johnchen902

+0

ओह ... अच्छा तो :) ज्ञान में जोड़ा गया। धन्यवाद –

0

आप

public void set(E extends SomeType){ 
this.data=data; 
} 

का उपयोग करते हैं तो आप किसी भी वस्तु है कि implements or extends SomeType याद रखें कि SomeType भी एक interface यहाँ हो सकता है पारित कर सकते हैं, भले ही यह अजीब बात है, हम E extends SomeType लिखने के लिए की जरूरत है।

0

अपने उपवर्गों पास करके विधि सेट कॉल कर सकते हैं या यह काम करेंगे ...?

या आप tried it out if it works है?

 final Node<Number> n = new Node<Number>(new Integer(666)); 
     System.out.println(n.get()); 
     n.set(new Integer(777)); 
     System.out.println(n.get()); 
संबंधित मुद्दे