आपका प्रस्तावित हस्ताक्षर शायद जावा -8 में काम करेगा। हालांकि पिछले जावा संस्करणों में अनुमान इतना स्मार्ट नहीं था। ध्यान दें कि आपके पास List<java.sql.Date>
है। ध्यान दें कि java.sql.Date
java.util.Date
बढ़ाता है जो Comparable<java.util.Date>
लागू करता है। जब आप संकलित करते हैं
List<java.sql.Date> list = new ArrayList<>();
Collections.sort(list);
यह जावा -7 में पूरी तरह से काम करता है। यहां T
अनुमानित java.sql.Date
है जो वास्तव में Comparable<java.util.Date>
है जो Comparable<? super java.sql.Date>
है। हालांकि के अपने हस्ताक्षर की कोशिश करते हैं:
public static <T extends Comparable<T>> void sort(List<? extends T> list) {}
List<java.sql.Date> list = new ArrayList<>();
sort(list);
यहाँ T
java.util.Date
के रूप में अनुमान लगाया जाना चाहिए। हालांकि जावा 7 विनिर्देश इस तरह की अनुमान की अनुमति नहीं देता है।
Main.java:14: error: method sort in class Main cannot be applied to given types;
sort(list);
^
required: List<? extends T>
found: List<Date>
reason: inferred type does not conform to declared bound(s)
inferred: Date
bound(s): Comparable<Date>
where T is a type-variable:
T extends Comparable<T> declared in method <T>sort(List<? extends T>)
1 error
प्रकार निष्कर्ष बहुत जावा-8 में सुधार किया गया था: इसलिए इस कोड जब जावा-7 के तहत संकलित जावा-8 के साथ संकलित किया जा सकता है, लेकिन विफल रहता है। अलग जेएलएस chapter 18 अब इसे समर्पित है, जबकि जावा -7 में नियम were बहुत आसान है।
स्रोत
2016-03-01 05:31:08
लेकिन स्थिर <टी ऑब्जेक्ट और तुलनात्मक super T>> टी अधिकतम (संग्रह extends T> सी) कैसे काम करता है ठीक है ... क्या यह फिर से एक अनुमान मुद्दा है? – prvn
@prvn, यहां आपके तुलनात्मक हस्ताक्षर में 'तुलनात्मक' की बजाय 'तुलनात्मक super T>' है। '<टी तुलनात्मक super T>> शून्य प्रकार (सूची extends T> सूची) बढ़ाता है '' भी काम करेगा, लेकिन 'जोड़ना होगा? 'अधिकतम' विधि में उचित होने पर टी 'पूरी तरह से अनावश्यक है (जैसा कि' अधिकतम' मान देता है)। –
एक और बिंदु है। जब आपके पास वाइल्डकार्ड प्रकार 'सूची extends T> सूची' है, तो आप वाइल्डकार्ड प्रकारों के काम के तरीके के कारण विधि के अंदर 'list.set (अनुक्रमणिका, list.get (anotherIndex))' नहीं कर सकते हैं। इसे कैप्चर करने वाली आंतरिक सहायक विधि के साथ छेड़छाड़ की जा सकती है? टी को किसी अन्य प्रकार परिवर्तनीय में बढ़ाता है (या अनियंत्रित संचालन का उपयोग करके आंतरिक कार्यान्वयन अक्सर करता है), लेकिन फिर भी, वाइल्डकार्ड के बिना एक प्रकार संशोधित होने वाली सूची के लिए क्लीनर है। – Holger