यह एक वास्तविक गैर-जेनेरिक वातावरण में प्रकार अनुमान लगाने के लिए अधिक समझ में नहीं आता है, अन्यथा आप और संकलक पहले से ही इस प्रकार को जानते हैं और किसी भी हस्तक्षेप के लिए कंपाइलर की आवश्यकता नहीं है। हालांकि बंद उदाहरण उदाहरण के लिए मुझे Target Types
मिल सकता है।डॉक्स से
एक तरीका है जिसके इस
void processStringList(List<String> stringList) {
// process stringList
}
के रूप में घोषित किया जाता है ले लो और तुम Collections.emptyList()
के बाद से इस
processStringList(Collections.emptyList());
से कॉल करने की एक List<Object
लौटा रहा है, तो कोई लक्ष्य निर्दिष्ट किया जाता है यह एक फेंक होगा त्रुटि
List<Object> cannot be converted to List<String>
यहां संकलक abl नहीं है ई List<>
के लिए प्रकार तर्कों में हस्तक्षेप करने के लिए। आपको स्पष्ट रूप से लक्ष्य प्रकार
processStringList(Collections.<String>emptyList());
हालांकि जेडीके 8 के साथ अब और आवश्यक नहीं है। Oracle docs Type Inference
यह लंबे समय तक जावा SE 8. क्या है लक्ष्य प्रकार इस तरह के विधि processStringList को तर्क के रूप में विधि तर्क, शामिल करने के लिए विस्तार किया गया है की धारणा में आवश्यक नहीं है। इस मामले में, प्रक्रिया स्ट्रिंगलिस्ट को प्रकार सूची की एक तर्क की आवश्यकता होती है। विधि संग्रह .emptyList सूची का एक मूल्य देता है, इसलिए लक्ष्य प्रकार के सूची का उपयोग करके, कंपाइलर अनुमान लगाता है कि टाइप तर्क टी में स्ट्रिंग का मान है। इस प्रकार, जावा SE 8 में, निम्नलिखित बयान संकलित:
तो पिछले उदाहरण में संकलक एक List<String>
Collections.emptyList()
से प्राप्त करने के लिए प्रकार तर्क हस्तक्षेप करता है।
स्रोत
2017-03-21 09:10:35
दिलचस्प सवाल। लेकिन मुझे लगता है कि जावा के वर्गों की बहुलक प्रकृति के कारण प्रत्येक बार एल्गोरिदम का उपयोग किया जाता है। – KarelG