आपका क्या मतलब है, इस प्रकार के प्रतिदेय lambdas के रूप में के उपयोग की वस्तुओं?
बहुत सरल मामलों में, जावा 8 lambdas वाक्यात्मक चीनी + इंटरफेस, अर्थात् कार्यात्मक इंटरफेस[1] के कुछ प्रकार के लिए गुमनाम वर्गों के लिए कुछ प्रकार निष्कर्ष के रूप में सोचा जा सकता है:
इंटरफ़ेस ऊपर इस्तेमाल किया गया एक्शन लिस्टनर, केवल एक विधि है। कई आम कॉलबैक इंटरफेस ऐसे Runnable और तुलनाकारी के रूप में इस संपत्ति, की है। हम सभी इंटरफेस देंगे जिनके पास केवल एक विधि है नाम: कार्यात्मक इंटरफेस।
टिप्पणी: लैम्बडा वास्तव में सिर्फ एक चीनी नहीं है; आंतरिक रूप से वे अज्ञात वर्गों से भिन्न रूप से लागू होते हैं, और कुछ अर्थपूर्ण अंतर भी होते हैं; इस मामले पर अधिक के लिए प्रोग्रामर एक्सचेंज पर this excellent answer देखें। हालांकि, यह इस प्रश्न और उत्तर के संदर्भ में वास्तव में महत्वपूर्ण नहीं है।
कहीं भी जहां कुछ कार्यात्मक इंटरफ़ेस का मान अपेक्षित है (विधि तर्क, स्थानीय चर, फ़ील्ड घोषणा आदि) इस विधि को कार्यान्वित करने वाले अज्ञात वर्ग के समान इकाई बनाने के लिए शॉर्ट सिंटैक्स का उपयोग करना संभव होगा, यानी लैम्ब्डा अभिव्यक्ति:
Runnable r =() -> {
System.out.println("Hi");
};
// Equivalent to
Runnable r = new Runnable() {
public void run() {
System.out.println("Hi");
}
};
public interface Function<F, T> {
T call(F arg);
}
Function<String, char[]> c = s -> ("<" + s + ">").toCharArray();
// Equivalent to
Function<String, char[]> c = new Function<>() {
public char[] call(String s) {
return ("<" + s + ">").toCharArray();
}
};
तो अपने प्रश्न केवल निम्नलिखित तरीके से व्याख्या की जा सकती है: यह जावा 8 लैम्ब्डा सिंटैक्स का उपयोग प्रकार IFn
की वस्तुओं को बनाने के लिए संभव है?
उत्तर नहीं है। लैम्ब्डा सिंटैक्स केवल कार्यात्मक इंटरफेस के साथ संभव है। clojure.lang.IFn
एक कार्यात्मक इंटरफ़ेस है, क्योंकि यह एक विधि की तुलना में अधिक होता है नहीं है, तो यह
IFn f = (String s) -> s.toLowerCase();
स्रोत
2013-01-22 08:57:05
IIRC, जावा 8 नहीं करता आप "कहते हैं" किसी भी नए तरीके से लैम्ब्डा कार्य; यह केवल _create_ lambda कार्यों के लिए नए तरीके प्रदान करता है, जो एकल-फ़ंक्शन इंटरफेस होना चाहिए। –