2012-10-31 11 views
7

जावा का उपयोग करते हुए जावा: मैं लोगों का समय बर्बाद नहीं करना चाहता था और इसे यहां पोस्ट नहीं करना चाहता था, लेकिन मेरे गुगल-कौशल ने मुझे असफल कर दिया है और मुझे जवाब नहीं मिल रहा है। मैं कुछ आपूर्ति कोड के माध्यम से देख रहा था और वेसार्वजनिक स्थिर <E> शून्य <E> शून्य

public static <E> void printTree(TwoFourTree<E> tf) 

इस्तेमाल किया (संदर्भ के लिए हम एक लाल काला पेड़ से एक दो चार पेड़ को परिवर्तित कर रहे हैं)। जब मैंने पहली बार इस समस्या से संपर्क किया तो मैं public static void की शुरुआती विधि घोषणा में शामिल होने के बजाय भी उपयोग नहीं करता था। हालांकि मैं <E> के बजाय <Integer> का उपयोग करने के बावजूद, मेरी <E> में समस्याओं को हल कर रहा हूं और फेंक रहा हूं।

तो मेरी सवाल है, कोई मुझे समझा वास्तव में क्या <E>

public static <E> void 
+1

यह एक सामान्य प्रकार पैरामीटर है। Http://docs.oracle.com/javase/tutorial/java/generics/ –

उत्तर

3

बनाने यह Generics के रूप में जाना एक जावा सुविधा है।

आप जेनिक्स का उपयोग क्यों करना चाहते हैं? खैर, निम्नलिखित एक परिदृश्य देता है जहां वे उपयोगी हैं। "बुरे पुराने दिनों" में वापस, यदि आप एक कक्षा चाहते थे जो किसी भी वस्तु के साथ काम कर सके, तो आपको वस्तुओं के संदर्भ में सभी इंटरफेस घोषित करना पड़ा, उदा।

public class MySuperList 
{ 
    public void Add(object a) { } 
} 

बहरहाल, यह बेकार है, क्योंकि आप कोई प्रकार-सुरक्षा मिल - आप निम्नलिखित की तरह कोड लिख सकते हैं: यदि आप अपने वर्ग दृढ़ता से टाइप करने की अनुमति देकर

// Your code 
MySuperList list = new MySuperList(); 
cars.Add(new Car("Ford Mondeo"));// Works 
cars.Add(new Fish("Herring")); // Works - which is a shame as a Fish is not a car! 

जेनेरिक्स पर यह समस्या नहीं है, लेकिन एक सामान्य तरीके से।उदाहरण के लिए:

public class MySuperList<T> 
{ 
    // Add method will only accept instances of type T. 
    public void Add(T a) { } 
} 

// Your code 
MySuperList<Cars> list = new MySuperList<Cars>(); 
cars.Add(new Car("Ford Mondeo"));// Works 
cars.Add(new Fish("Herring")); // Compile-time error. 
+1

बस एक तकनीकी बात है, लेकिन विधि नाम आम तौर पर लोअर-केस अक्षर से शुरू होते हैं। – arshajii

+1

क्षमा करें - मैं व्यापार द्वारा सी # प्रोग्रामर हूं;) –

0

में यह एक सामान्य विधि बनाता करता है कृपया कर सकते हैं; यानी यह आपको TwoFourTree का उपयोग करने की अनुमति देता है जिसमें किसी भी प्रकार की वस्तु आपके तर्क के रूप में होती है (इस मामले में)।

आप, उदाहरण के लिए, केवल स्वीकार करने के लिए उस प्रकार List की वस्तुओं आयोजित TwoFourTree रों चाहते हैं तो आपके विधि के रूप में

public static <E extends List> void ... 

आप केवल Number वस्तुओं (Integer, Double आदि) चाहते हैं तो आप को परिभाषित करेगा

public static <E extends Number> void ... 

यह एक कारण है कि इस तरह के तरीकों को बनाने में वास्तव में उपयोगी हो सकता है। मैं कहना चाहिए कि मज़ा यहां समाप्त नहीं होता है, तो आप उदाहरण के लिए, कई प्रकार पैरामीटर का उपयोग कर एक ही कर सकते हैं:

public static <T, S extends Number> void ... 

मुझे लगता है कि आप यह फायदेमंद सामान्य तरीकों पर this ट्यूटोरियल पढ़ने के लिए मिल सकती है अगर आप ' डी और जानना पसंद है।

0
इसके बजाय लेखन

public static Integer ... 
public static Double ... 
public static Long ... 

की

...

तुम सब जेनरिक विधि

public static <E> 
+2

देखें आप इंटीजर या शून्य के साथ 'इंटीजर शून्य' विधि नहीं लिख सकते हैं। कृपया अपना उत्तर संपादित करें या हटाएं। –

+0

क्या बेवकूफ शुरुआत गलती :) इसे ध्यान में रखने के लिए धन्यवाद। – elrado

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