मुख्य बिंदु यह है कि जावा में कोई "फ़ंक्शन प्रकार" नहीं है। एक लैम्ब्डा अभिव्यक्ति में स्वयं "प्रकार" नहीं होता है - इसे पर कार्यात्मक इंटरफ़ेस टाइप किया जा सकता है जिसका एकमात्र तरीका हस्ताक्षर लैम्ब्डा से मेल खाता है। इसलिए, एक लैम्ब्डा का प्रकार इसके संदर्भ द्वारा प्रदान किए गए प्रकार पर आधारित होता है। एक प्रकार के लिए संदर्भ के रूप में आपको एक कार्यात्मक इंटरफ़ेस प्रदान करना होगा।
यह एक ही मुद्दे पर विचार करने के लिए निर्देशक है लेकिन अज्ञात वर्गों के लिए। यद्यपि लैम्बडास और अज्ञात वर्गों के बीच कार्यान्वयन अंतर हैं, अर्थात्, लैम्ब्डा अनिवार्य रूप से अज्ञात वर्गों के उप-समूह के बराबर हैं, और लैम्ब्डा अभिव्यक्ति को हमेशा समकक्ष अज्ञात वर्ग निर्माण अभिव्यक्ति में परिवर्तित किया जा सकता है।
जब आप लिखें:
Function<T, Stream<T>> of_ref = Stream::of;
यह निम्नलिखित गुमनाम वर्गों का उपयोग की तरह कुछ के बराबर है:
Function<T, Stream<T>> of_ref = new Function<T, Stream<T>>() {
Stream<T> apply(T t) {
return Stream.of(t);
}
};
अब विचार करना
Object of_ref = Stream::of;
गुमनाम वर्गों के साथ बराबर है क्या ?
Object of_ref = new [**What goes here?**]() {
[**What method signature goes here?**] {
return Stream.of(t);
}
};
आप देखते हैं कि यह क्यों समझ में नहीं आता है - हम नहीं जानते कि अनाम वर्ग के बेस क्लास के रूप में किस प्रकार का उपयोग करना है।
आपके पहले असम्बद्ध स्निपेट में आप 'of_ref' में संग्रहीत होने की अपेक्षा करेंगे? संदर्भित ठोस प्रकार का ठोस प्रकार क्या होगा? –