2013-04-24 6 views
7

मैं जावा जेनेरिक पढ़ रहा था, मैं एक दिलचस्प क्वेरी में आया। मेरा सवाल इस प्रकार है।ऊपरी बाउंड और निचले बाएं जंगली कार्ड के लिए जावा जेनिक्स

  1. एक ऊपरी घिरे वाइल्डकार्ड

    public static void printList(List<? extends Number> list) { 
        for (int i = 0; i < 10; i++) { 
         list.add(i);// gives compilation error 
        } 
    } 
    
  2. एक कम घिरे वाइल्डकार्ड के लिए

    public static void printList(List<? super Integer> list) { 
        for (int i = 0; i < 10; i++) { 
         list.add(i);// successfully compiles 
        } 
    } 
    

मैं इस के साथ उलझन में हूँ क्योंकि सूर्य ओरेकल प्रलेखन को देखकर मुझे लगता है कि समझ में कोड को बिंदु 1 के साथ संकलित करना चाहिए

Upper Bound Wildcard Lower Bound Wildcard

किसी कृपया मुझे इस को समझने में मदद कर सकते हैं?

+0

@baraky: लिंक के लिए धन्यवाद, मैंने इसे किसी भी तरह से याद किया .. लेकिन फिर भी सवाल यह है कि जेनेरिक प्रकार जानता है कि इसे संख्या द्वारा विस्तारित वर्ग होना चाहिए। अनावश्यक प्रश्न के लिए खेद है। यह अभी भी मेरे लिए अस्पष्ट है। – chaosguru

उत्तर

7

इसका कारण यह है कि जब आप ऊपरी सीमा का उपयोग कर रहे हैं, आप नहीं तत्वों संग्रह करने के लिए जोड़ सकते हैं, केवल उन्हें पढ़ने के लिए है।

इसका मतलब है कि इन कानूनी कार्य में से कुछ हैं:

List<? extends Number> l = new ArrayList<Integer>(); 
List<? extends Number> l = new ArrayList<Double>(); 

ताकि आप गारंटी नहीं दे सकते कि जब वस्तु जोड़ने, यह वस्तुओं की सही प्रकार का आयोजन करेगा। बेहतर स्पष्टीकरण के लिए कृपया पालन करें: How can I add to List<? extends Number> data structures?

1

असल में, सौभाग्य से वही परिदृश्य, मुझे सूर्य ओरेकल दस्तावेज के अगले पृष्ठों के तहत जवाब मिला। कृपया नीचे दिए गए लिंक को ढूंढें। किसी ऐसे व्यक्ति के लिए उपयोगी हो सकता है जो भविष्य में खोज करेगा।

Wildcard Capture

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