मैंने जावा 8 में अपग्रेड किया और एक नए लम्दा अभिव्यक्ति के साथ एक मानचित्र के माध्यम से एक सरल पुनरावृत्ति को बदलने की कोशिश की। लूप शून्य मानों की खोज करता है और अगर कोई पाया जाता है तो अपवाद फेंकता है।मैं जावा 8 लैम्ब्डा अभिव्यक्ति में अपवाद क्यों नहीं डाल सकता?
myMap.forEach((k,v) -> {
if(v == null) {
// OK
System.out.println("Key '" + k+ "' not found!");
// NOK! Unhandled exception type!
throw new MyException("Key '" + k + "' not found!");
}
});
किसी को भी व्याख्या कर सकते हैं क्यों throw
बयान यहाँ की अनुमति दी है और कैसे इस सकता है नहीं:
for (Map.Entry<String, String> entry : myMap.entrySet()) {
if(entry.getValue() == null) {
throw new MyException("Key '" + entry.getKey() + "' not found!");
}
}
और जावा 8 में बदलने के लिए मेरे प्रयास इस तरह दिखता है: पुराने जावा 7 कोड इस तरह दिखता है सही किया जाना चाहिए?
ग्रहण के जल्दी ठीक सुझाव मेरे लिए सही नहीं लगता है ... यह बस एक try-catch
ब्लॉक के साथ throw
बयान चारों ओर से घेरे:
myMap.forEach((k,v) -> {
if(v == null) {
try {
throw new MyException("Key '" + k + "' not found!");
}
catch (Exception e) {
e.printStackTrace();
}
}
});
एक बहुत ही सरल जवाब है: लैम्ब्डा भाव एक कार्यात्मक इंटरफ़ेस को लागू करने का एक संक्षिप्त साधन हैं। एक इंटरफ़ेस को लागू करने के किसी भी अन्य तरीके की तरह, आपको इंटरफ़ेस अनुबंध के अनुरूप होना चाहिए - जिसका अर्थ है कि आप केवल लक्ष्य प्रकार द्वारा अनुमत अपवादों को फेंक सकते हैं। यहां कोई जादू नहीं है। –