मैंने देखा है कि वाइल्डकार्ड का उपयोग किसी भी वस्तु से पहले किया जाता है - लेकिन हाल ही में इसका उपयोग देखा गया है:
<? extends Object>
चूँकि सभी ऑब्जेक्ट ऑब्जेक्ट का विस्तार करते हैं, क्या ये दो प्रयोग पर्यायवाची हैं?
मैंने देखा है कि वाइल्डकार्ड का उपयोग किसी भी वस्तु से पहले किया जाता है - लेकिन हाल ही में इसका उपयोग देखा गया है:
<? extends Object>
चूँकि सभी ऑब्जेक्ट ऑब्जेक्ट का विस्तार करते हैं, क्या ये दो प्रयोग पर्यायवाची हैं?
जवाबों:
<?>
और <? extends Object>
पर्यायवाची हैं, जैसा कि आप उम्मीद करेंगे।
जेनरिक के साथ कुछ मामले हैं जहां extends Object
वास्तव में बेमानी नहीं है। उदाहरण के लिए, क्षरण के अधीन हो <T extends Object & Foo>
जाएगा , जबकि इसके साथ यह क्षरण के अधीन हो जाएगा । (यदि आप उपयोग किए गए प्री-जेनरिक एपीआई के साथ संगतता बनाए रखने की कोशिश कर रहे हैं तो यह बात हो सकती है ।)T
Object
<T extends Foo>
Foo
Object
स्रोत: http://download.oracle.com/javase/tutorial/extra/generics/convert.html ; यह बताता है कि JDK की java.util.Collections
कक्षा में इस हस्ताक्षर के साथ एक विधि क्यों है :
public static <T extends Object & Comparable<? super T>> T max(
Collection<? extends T> coll
)
extends Object
वास्तव में सार्थक है। अगर मुझसे गलती हुई, तो मैं माफी मांगता हूं। उम्मीद है कि यह कम से कम आपके सवाल पर आने वाले अन्य लोगों के लिए दिलचस्पी का होगा।
हालाँकि <?>
माना जाता है कि यह एक शॉर्टकट है <? extend object>
, दोनों के बीच एक छोटा सा अंतर है।
<?>
नहीं है, जबकि reifiable <? extend object>
है। ऐसा करने का कारण यह है कि वे पुन: प्रयोज्य प्रकार को भेदना आसान बनाते हैं। ऐसा लगता है कि कुछ भी है कि <? extends something>
, <T>
, <Integer>
nonreifiable हैं।
उदाहरण के लिए, यह कोड काम करेगा
List aList = new ArrayList<>();
boolean instanceTest = aList instanceof List<?>;
लेकिन यह एक त्रुटि देता है
List aList = new ArrayList<>();
boolean instancetest = aList instanceof List<? extends Object>;
अधिक जानकारी के लिए मौरिस नाफ्टलिन द्वारा जावा जेनरिक और संग्रह पढ़ें
<?>
के लिए एक आशुलिपि है <? extends Object>
। अधिक जानकारी के लिए आप नीचे दिए गए साझा लिंक को पढ़ सकते हैं।
<?>
"?"
किसी भी अज्ञात प्रकार को दर्शाता है, यह कोड में किसी भी प्रकार का प्रतिनिधित्व कर सकता है। यदि आप टाइप के बारे में निश्चित नहीं हैं, तो इस वाइल्डकार्ड का उपयोग करें।
ArrayList<?> unknownList = new ArrayList<Number>(); //can accept of type Number
unknownList = new ArrayList<Float>(); //Float is of type Number
नोट: <?>
मतलब किसी भी। तो यह उस प्रकार को स्वीकार कर सकता है जो Object
वर्ग से विरासत में नहीं मिला है ।
<? extends Object>
<? extends Object>
इसका मतलब है कि आप एक वस्तु या एक उप-वर्ग पास कर सकते हैं जो कक्षा का विस्तार करता है Object
।
ArrayList<? extends Number> numberList = new ArrayList<Number>(); //Number of subclass
numberList = new ArrayList<Integer>(); //Integer extends Number
numberList = new ArrayList<Float>(); // Float extends Number
टी - निरूपित प्रकार के लिए इस्तेमाल किया
निरूपित तत्व के लिए इस्तेमाल किया - ई
कश्मीर - कुंजी
वी - मूल्यों
एन - संख्या के लिए
रेफरी:
Object
वर्ग से विरासत में मिली हैं ।