नीचे दिए गए कोड को चलाने से त्रुटि संदेश Bad type on operand stack
में परिणाम मिलता है।ऑपरेंड स्टैक पर खराब प्रकार ... जेडीके 8 का उपयोग करके, अनाम आंतरिक कक्षाओं के साथ लैम्ब्डा विफल रहता है, क्यों?
public static void main(String args[]) {
TransformService transformService = (inputs) -> {
return new ArrayList<String>(3) {{
add("one");
add("two");
add("three");
}};
};
Collection<Integer> inputs = new HashSet<Integer>(2) {{
add(5);
add(7);
}};
Collection<String> results = transformService.transform(inputs);
System.out.println(results.size());
}
public interface TransformService {
Collection<String> transform(Collection<Integer> inputs);
}
हालांकि लैम्डा के भीतर डबल ब्रेस प्रारंभिक (अनाम आंतरिक कक्षाएं) को हटाने से कोड को उम्मीद के अनुसार चलाने की अनुमति मिलती है, क्यों? नीचे दिए गए काम:
public class SecondLambda {
public static void main(String args[]) {
TransformService transformService = (inputs) -> {
Collection<String> results = new ArrayList<String>(3);
results.add("one");
results.add("two");
results.add("three");
return results;
};
Collection<Integer> inputs = new HashSet<Integer>(2) {{
add(5);
add(7);
}};
Collection<String> results = transformService.transform(inputs);
System.out.println(results.size());
}
public interface TransformService {
Collection<String> transform(Collection<Integer> inputs);
}
}
कंपाइलर बग? यह जल्दी पहुँच संस्करण सब के बाद ...
(यह संकलन नहीं होगा जब तक आप नवीनतम jdk 8 lambda download की है।)
टैग लैम्ब्डा जावा के अलावा अन्य भाषाओं के लिए सी #, सी ++ जैसी भाषाओं के लिए है। – Lion
@Lion: मेरा मानना है कि जावा 8 लैम्बडा लागू करता है (मैंने कभी इसका उपयोग नहीं किया है, इसलिए मुझे यह तथ्य नहीं पता है), और इसलिए यह टैग प्रश्न के लिए उपयुक्त प्रतीत होता है। –
@Lion यही कारण है कि जावा के पहले लैम्बडा नहीं था। एक लैम्ब्डा एक लैम्ब्डा है, भले ही यह भाषा के अल्फा संस्करण में हो। –