पर विचार करें इन दो वर्गोंक्या 2 नेस्टेड विकल्पों में लिपटे ऑब्जेक्ट को खोलने का कोई शानदार तरीका है?
class EmailService {
public Optional<String> getEmailAlias(String email);
}
enum Queue {
public static Optional<Queue> fromEmailAlias(String alias);
}
उपरोक्त विधियों के कार्यान्वयन सवाल का महत्वपूर्ण नहीं है तो मुझे लगता है कि सादगी के लिए बाहर छोड़ दिया है।
emailService.getEmailAlias("[email protected]")
.map(Queue::fromEmailAlias)
.ifPresent(queue -> {
// do something with the queue instance, oh wait it's an Optional<Queue> :(
});
हालांकि, यह काम नहीं करता क्योंकि queue
प्रकार Optional<queue>
(एक ही प्रकार के रूप में Queue::fromEmailAlias
द्वारा दिया) की है, इसलिए मैं इस बजाय:
मैं ऐसा करना चाहते हैं
emailService.getEmailAlias("[email protected]")
.map(Queue::fromEmailAlias)
.ifPresent(q-> {
q.ifPresent(queue -> {
// do something with the queue instance
}
});
बदसूरत imho की तरह।
public static Queue fromEmailAlias(String alias);
को
public static Optional<Queue> fromEmailAlias(String alias);
के हस्ताक्षर बदलने त्वरित सुधार है, लेकिन यह भी अन्य स्थानों पर जो Optional<Queue>
की जरूरत है मेरी कोड पर असर पड़ेगा।
क्या इस नेस्टेड वैकल्पिक को खोलने का कोई अच्छा तरीका है?