2013-02-26 70 views
6

Oracle's documentation of Type Inferenceटाइप अनुमान एल्गोरिदम सबसे विशिष्ट प्रकार खोजने का प्रयास क्यों करता है?

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

पिछले बिंदु को समझने के लिए, निम्न उदाहरण में, अनुमान निर्धारित करता है कि दूसरा तर्क पिकअप विधि करने के लिए पारित किया जा रहा प्रकार Serializable की है:

static <T> T pick(T a1, T a2) { return a2; } 
Serializable s = pick("d", new ArrayList<String>()); 

क्यों एल्गोरिथ्म खोजने की कोशिश करता सबसे विशिष्ट प्रकार?

+6

क्यों नहीं करना चाहिए? –

+0

@defaultlocale इस प्रश्न का उत्तर देने का एक तरीका यह है कि इसका जवाब क्यों देना चाहिए? अगर आपको पता है कि इसका जवाब क्यों नहीं देना चाहिए और मैं इसे स्वीकार कर दूंगा। – Geek

+1

क्योंकि विधि ओवरलोडिंग जैसी कोई चीज़ नहीं होगी अगर यह – radai

उत्तर

5

क्योंकि इस नियम को लागू नहीं किया गया था, इसलिए असाइनमेंट संगतता आमंत्रण अस्पष्ट कर देगी।

उदाहरण के लिए, PrintStreamprint(Object) और print(String) अगर सबसे विशिष्ट प्रकार का नियम लागू नहीं कर रहे थे, print("bar") प्रिंट (String) है, जो counterintuitive होगा के बजाय print(Object) आह्वान सकता परिभाषित करता है।

ध्यान दें कि प्रकार चयन, संकलन समय प्रकार के आधार पर किया जाता है तो में निम्न उदाहरण print(Object) शुरू हो जाती है:

PrintStream out = ...; 
Object bar = "bar"; 
out.print(bar); 
out.print((Object)"foo");