मैं जावा 8 में नए वैकल्पिक प्रकार के साथ काम कर रहा हूं, और मैं एक सामान्य ऑपरेशन की तरह लगता है जो कार्यात्मक रूप से समर्थित नहीं है: "orElseOptional"
निम्नलिखित पैटर्न पर विचार करें:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
इस पैटर्न के कई रूप हैं, लेकिन यह एक वैकल्पिक विकल्प पर "orElse" चाहने के लिए उकसाता है जो एक नया वैकल्पिक उत्पादन करने वाले फ़ंक्शन को लेता है, जिसे केवल वर्तमान एक मौजूद नहीं है।
यह कार्यान्वयन इस तरह दिखेगा:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
अगर इस तरह की कोई विधि मौजूद नहीं है, तो मैं उत्सुक हूं, अगर मैं सिर्फ अनपेक्षित तरीके से वैकल्पिक का उपयोग कर रहा हूं, और इस मामले से निपटने के लिए लोग और क्या तरीके अपनाते हैं।
मुझे यह कहना चाहिए कि मुझे लगता है कि कस्टम यूटिलिटी क्लासेस / मेथड से जुड़े समाधान सुरुचिपूर्ण नहीं हैं क्योंकि मेरे कोड के साथ काम करने वाले लोग जरूरी नहीं जानते कि वे मौजूद हैं।
इसके अलावा, अगर किसी को पता है, तो क्या इस तरह की विधि को जेडीके 9 में शामिल किया जाएगा, और मैं ऐसी विधि का प्रस्ताव कहां रख सकता हूं? यह मुझे करने के लिए एपीआई के लिए एक बहुत चमक चूक की तरह लगता है।
orElseGet()
ओपी की जरूरत है, केवल यह अच्छा कैस्केडिंग सिंटैक्स उत्पन्न नहीं करता है।