क्यों कंपाइलर फ़ंक्शन रिटर्न प्रकार के मामले में String
टाइप पैरामीटर का सही ढंग से अनुमान लगाने में सक्षम है।जावा 7 जेनेरिक प्रकार अनुमान: वापसी मूल्य बनाम विधि तर्क
public class Generics {
public static void main(String[] args) {
method(new ArrayList<>());
}
private static void method(List<String> list) {
}
}
इस मामले में त्रुटि है:
public class Generics {
private static List<String> function() {
return new ArrayList<>();
}
}
लेकिन जब प्रकार अनुमान लगाने के लिए यह असफल एक विधि पैरामीटर है
The method method(List<String>) in the type Generics is not applicable
for the arguments (ArrayList<Object>)
क्योंकि जहां भी संभव हो, वे सामान्य प्रकार के अनुमान को कार्यान्वित करने से परेशान नहीं थे। मैंने इस विशिष्ट मामले का परीक्षण नहीं किया है, लेकिन जावा 8 लैम्बडास की सहायता के लिए प्रकार अनुमान के संबंध में बहुत सारे सुधार लाता है। –
ऐसा इसलिए है क्योंकि परिमित समय में हल करने के लिए सही प्रकार की अनुमान बहुत कठिन समस्या है (यह जटिलता के समान क्रम पर रोकथाम की समस्या के रूप में है)। इस प्रकार, जावा डेवलपर्स को कहीं रेखा खींचनी पड़ी। जैसा कि अन्य ने ध्यान दिया है, वे लगातार लाइन को आगे बढ़ा रहे हैं, लेकिन कुछ सीमाएं मौजूद हैं। –
@ कॉन्स्टेंटिन नारीशकिन: जावा 8 पर किए गए काम से पता चलता है कि उन्होंने लाइन को जल्दी ही खींचा। अधिक उपयोगी नियम * * संभव हैं * * जावा 8 में एकीकृत किए जा रहे हैं। यह कहना आसान है कि उन्हें इसे पहली बार धक्का देना चाहिए था, लेकिन यह अनुमान करना मुश्किल है कि अतिरिक्त कार्य के वास्तविक लाभ क्या हैं। सभी शुरुआती कार्यान्वयन में बहुत उपयोगी था। लेकिन यह पहले सुधार किया जा सकता था। –