तकनीकी रूप से, जावा का उपयोग जेनरिक का उपयोग करते समय टाइप अवरचना है। एक साथ सामान्य विधि की तरह
public <T> T foo(T t) {
return t;
}
कंपाइलर विश्लेषण करेगा और समझेगा कि आप कब लिखते हैं
// String
foo("bar");
// Integer
foo(new Integer(42));
पहली कॉल के लिए एक स्ट्रिंग लौटाया जा सकता है और एक तर्क के रूप में इनपुट के आधार पर दूसरी कॉल के लिए एक पूर्णांक बनाया जाएगा। परिणामस्वरूप आपको उचित संकलन-समय की जाँच मिल जाएगी। इसके अतिरिक्त, जावा 7 में, जेनरिक को इंस्टेंट करने पर कुछ अतिरिक्त प्रकार के अनुमान लगाने पड़ सकते हैं
Map<String, String> foo = new HashMap<>();
जावा हमारे लिए रिक्त कोण कोष्ठक में भरने के लिए पर्याप्त है। अब चर समर्थन के एक हिस्से के रूप में जावा समर्थन प्रकार का अनुमान क्यों नहीं लगाता है ? एक बिंदु पर, चर घोषणाओं में टाइप अवर के लिए एक RFE था , लेकिन इसे "ठीक नहीं होगा" के रूप में बंद कर दिया गया था
मनुष्य दो प्रकार से घोषणा के अतिरेक से लाभान्वित होता है। सबसे पहले, निरर्थक प्रकार मूल्यवान प्रलेखन के रूप में कार्य करता है - पाठकों को यह जानने के लिए कि यह किस प्रकार का रिटर्न मिलता है, वे गेटपैप () की घोषणा के लिए खोज न करें। दूसरा, अतिरेक प्रोग्रामर को इच्छित प्रकार घोषित करने की अनुमति देता है, और इस तरह संकलक द्वारा निष्पादित क्रॉस चेक से लाभ होता है।
इसे बंद करने वाले योगदानकर्ता ने यह भी नोट किया कि यह "अन-जावा-लाइक" महसूस करता है, जिससे मैं सहमत हूं। जावा की वाचालता एक आशीर्वाद और अभिशाप दोनों हो सकती है, लेकिन यह भाषा को वह बनाता है जो यह है।
बेशक कि विशेष रूप से RFE उस बातचीत का अंत नहीं था। जावा 7 के दौरान, इस सुविधा पर फिर से विचार किया गया था , जिसमें कुछ परीक्षण कार्यान्वित किए गए थे, जिनमें से एक जेम्स गोसलिंग ने खुद को शामिल किया था। फिर, इस सुविधा को अंततः नीचे गोली मार दी गई थी।
Java 8 की रिलीज़ के साथ, अब हमें लैम्ब्डा के एक भाग के रूप में टाइप इनफैक्शन मिलता है:
List<String> names = Arrays.asList("Tom", "Dick", "Harry");
Collections.sort(names, (first, second) -> first.compareTo(second));
जावा कंपाइलर विधि को देखने में सक्षम है Collections#sort(List<T>, Comparator<? super T>)
और फिर इंटरफ़ेस Comparator#compare(T o1, T o2)
और निर्धारित करता है first
और इस प्रकार प्रोग्रामर को लंबोदर अभिव्यक्ति में टाइप को आराम करने की अनुमति देने की अनुमति second
होनी चाहिए String
।