2013-02-22 24 views
5

जब आपके पास कोई तरीका है, तो मैं समझता हूं कि इसे सामान्य घोषित करने का अर्थ है ताकि मैं सामान्य तर्क ले सकूं। इस तरह:कक्षा सामान्य बनाने का क्या मतलब है?

public <T> void function(T element) { 
    // Some code... 
} 

लेकिन वास्तव में अगर मैं बस हर विधि सामान्य घोषणा कर सकते हैं एक पूरा वर्ग सामान्य बनाने के पीछे विचार यह क्या है?

+0

तो क्या आपके पास सामान्य प्रकार की कक्षा में चर हो सकते हैं? – Dukeling

+0

एक विधि एक सदस्य है और यह पूरी कक्षा जेनेरिक बनाने के बिना सामान्य हो सकती है। केवल दूसरी बात मैं के बारे में सोच सकता है सामान्य – user1420042

+4

उदाहरण चर मुझे लगता है कि इस विवरण के बिना downvoted नहीं किया जाना चाहिए बनाने के लिए सक्षम किया जा रहा है। जबकि हम में से ज्यादातर लोग जावा का उपयोग कुछ समय के लिए कर सकते हैं, यह सोच सकता है कि यह स्पष्ट है, वहां ऐसे लोग हैं जो अभी सीखना शुरू कर चुके हैं, और मुझे लगता है कि यह एक वैध सवाल है। – Axel

उत्तर

6

खैर, अंतर यह है कि यदि आप अपनी कक्षा जेनेरिक सामान्य प्रकार में प्रत्येक विधि को बनाने का प्रयास करते हैं तो आप अपने पहले इस्तेमाल में उपयोग करेंगे जेनरिक मोड एक ही प्रकार का हो सकता है या नहीं। मेरा मतलब क्या है।

public <T> void firstGenMethod(...){ 

} 

public <T> void secondGenMethod(...){ 

} 

टेस्ट:

SomeClass ref = new SomeClass(); 
    ref.firstGenMethod("string"); 
    ref.secondGenMethod(123);//legal as this generic type is not related to the generic type which is used by firstGenMethod 

ऊपर मामले में कोई gaurentee कि दोनों तरीकों में एक ही सामान्य type.It है आप उन्हें कैसे आह्वान पर निर्भर करता है है। यदि आप कक्षा सामान्य बनाते हैं, तो उस वर्ग के अंदर सभी विधियों पर प्रकार लागू होता है।

class Test<T>{ 

    public void firstGenMethod(T t){ 

    } 

    public void secondGenMethod(T t){ 

    } 
} 

टेस्ट:

Test<String> testingString = new Test<>(); 
    testingString.firstGenMethod("abc"); 
    testingString.firstGenMethod(123);// invalid as your Test class only expects String in this case 

आप आम तौर पर अपनी कक्षा सामान्य जहां एक ही प्रकार पर कार्रवाई करने के लिए उस वर्ग के पूरे व्यवहार (विधि) चाहते हैं बनाने चाहते हैं। सर्वोत्तम उदाहरण में जावा संग्रह फ्रेमवर्क

1

मुख्य विचार है एक type.The सबसे अच्छा उदाहरण के लिए वर्ग/विधि बाध्य करने के लिए प्रोग्रामिंग language.It में Generics की अवधारणा
जेनेरिक कक्षाओं के संचालन है कि एक विशेष लिए विशिष्ट नहीं हैं संपुटित बहुरूपता का असली अनुप्रयोग है डाटा प्रकार। जेनेरिक कक्षाओं के लिए सबसे आम उपयोग लिंक्ड सूचियों, हैश टेबल, स्टैक्स, कतार, पेड़ जैसे संग्रहों के साथ होता है, जहां संग्रह से वस्तुओं को जोड़ने और हटाने जैसे संचालन डेटा के प्रकार के बावजूद समान तरीके से किए जाते हैं संग्रहीत।

अधिकांश परिदृश्यों के लिए संग्रह कक्षाओं की आवश्यकता होती है, अनुशंसित दृष्टिकोण प्रोग्रामिंग भाषाओं में प्रदान किए गए लोगों का उपयोग करना है।
से oracle docs
एक सामान्य प्रकार reffering एक सामान्य वर्ग या इंटरफ़ेस प्रकार से अधिक पैरामिट्रीकृत

public class Box { 
    private Object object; 

    public void set(Object object) { this.object = object; } 
    public Object get() { return object; } 
} 


है तक है सामान्य रूप से आप कर सकते हैं सख्त यह

public class Box<T> { 
    // T stands for "Type" 
    private T t; 

    public void set(T t) { this.t = t; } 
    public T get() { return t; } 
} 


मैं भी करने के लिए आपको यह tutorial

4
देखने का सुझाव देता है

संग्रह कक्षाओं पर एक नज़र डालें। उदाहरण के रूप में List<T> लें। यदि कक्षा को सामान्य घोषित नहीं किया गया था, तो आप कैसे सुनिश्चित करेंगे कि सही वर्ग के केवल तत्व सूची में डाले जा सकते हैं? और ArrayList.get(i) पर कॉल करते समय आपको क्या पता चलेगा?

2

यह सुनिश्चित करने के लिए कि इस वर्ग में सभी विधियां एक निश्चित प्रकार पर लागू होती हैं।

यह आमतौर पर "कंटेनरों" कक्षाओं में प्रयोग किया जाता है। यदि आप एक सूची बना रहे हैं, और आप इसे सामान्य बनाते हैं, तो आप यह सुनिश्चित करना चाहते हैं कि तत्व जोड़ना, तत्व प्राप्त करना, पुनरावृत्ति करना आदि ... हमेशा एक ही प्रकार का उपयोग करता है।

तुम उल्लेख के रूप में, यह भी आप एक निश्चित प्रकार के उदाहरण चर का उपयोग करने के लिए, और कई तरीकों इस उदाहरण का उपयोग एक सुसंगत तरीके से (शायद यह लौटने, यह प्रभावित ...) है की अनुमति देता है।

आप एक वर्ग है जो कई विभिन्न प्रकार की "सामान्य" है, तो यह एक संकेत है कि आप वास्तव में एक में दो सामान्य वर्गों लिख रहे हैं हो सकता है ... (हालांकि यह एक वैध बात हो सकती है।)

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