निम्नलिखित नमूने में, Foo.test()
में पहली कॉल के लिए जेनेरिक तर्कों का अनुमान लगाने में सक्षम क्यों है, लेकिन दूसरे में ऐसा करने में सक्षम नहीं है? मैं जावा 6.तर्कों के रूप में उपयोग किए जाने वाले कार्यों के लिए जेनेक सामान्य प्रकार के तर्कों का अनुमान क्यों नहीं लगा सकते हैं?
public class Nonsense {
public static class Bar {
private static void func(Foo<String> arg) { }
}
public static class Foo<T> {
public static <T> Foo<T> create() {
return new Foo<T>();
}
private static void test() {
Foo<String> foo2 = Foo.create(); // compiles
Bar.func(Foo.create()); // won't compile
Bar.func(Foo.<String>create()); // fixes the prev line
}
}
}
(संकलन त्रुटि है विधि समारोह (Nonsense.Foo) प्रकार Nonsense.Bar में तर्क (Nonsense.Foo) लिए लागू नहीं है) का उपयोग कर रहा हूँ।
नोट: मैं समझता हूं कि संकलक त्रुटि परीक्षण() में तीसरी पंक्ति द्वारा तय की जा सकती है - मुझे इस बात की उत्सुकता है कि क्या एक विशिष्ट सीमा है जो संकलक को प्रकार का अनुमान लगाने में सक्षम होने से रोकती है। यह मेरे लिए दिखाई देता है कि यहां इसके लिए पर्याप्त संदर्भ है।
मुझे यकीन नहीं है कि आप क्या जवाब देते हैं, इसके अलावा "यह पर्याप्त स्मार्ट नहीं है।" –
@ लुइस - यह कल्पना की जा सकती है कि पर्याप्त स्मार्ट होना संभव नहीं है, लेकिन मुझे पता नहीं चला कि क्यों, अभी तक। – bacar
@bacar: शायद यह काफी स्मार्ट होना संभव है, यह सिर्फ नहीं है। –