मुझे उत्सुकता थी कि रिटर्न प्रकार वाले लैम्ब्डा को Runnable
पर क्यों नहीं डाला जा सकता है जबकि एक गैर-शून्य विधि संदर्भ हो सकता है।लैम्ब्डा कास्टिंग नियम
Runnable r1 =() -> 1; // not allowed
// error: incompatible types: bad return type in lambda expression
// int cannot be converted to void
Runnable r2 = ((Supplier)() -> 1)::get; // allowed
क्या आप इंगित कर सकते हैं कि जेएलएस में कहां बताया गया है कि, उस स्थिति में, "तीर के बाद वाला हिस्सा" -> '_statement_ होना चाहिए"? मुझे इसके लिए देखना है। – Tunaki
@ टुनकी इसे मिला, यह [§15.27.3] है (https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3)। – RealSkeptic
@RealSkeptic Ha वास्तव में सही है: * यदि फ़ंक्शन प्रकार का परिणाम शून्य है, तो लैम्ब्डा बॉडी या तो एक कथन अभिव्यक्ति (§14.8) या शून्य-संगत ब्लॉक है। * और प्राथमिक अभिव्यक्ति एक कथन अभिव्यक्ति नहीं है (और isn ' टी ब्लॉक)। – Tunaki