Rozważmy te dwie klasyCzy istnieje elegancki sposób na rozwinięcie obiektu zawiniętego w 2 zagnieżdżone opcje?
class EmailService {
public Optional<String> getEmailAlias(String email);
}
enum Queue {
public static Optional<Queue> fromEmailAlias(String alias);
}
Realizacja powyższych metod nie jest ważne na pytanie tak mi zostało, że dla uproszczenia.
chcę to zrobić:
emailService.getEmailAlias("[email protected]")
.map(Queue::fromEmailAlias)
.ifPresent(queue -> {
// do something with the queue instance, oh wait it's an Optional<Queue> :(
});
Jednak to nie działa, ponieważ queue
jest typu Optional<queue>
(tego samego typu zwracanego przez Queue::fromEmailAlias
), więc muszę to zamiast:
emailService.getEmailAlias("[email protected]")
.map(Queue::fromEmailAlias)
.ifPresent(q-> {
q.ifPresent(queue -> {
// do something with the queue instance
}
});
Rodzaj brzydkiego imho.
Zmiana podpisu
public static Optional<Queue> fromEmailAlias(String alias);
do
public static Queue fromEmailAlias(String alias);
to szybko naprawić, ale to również wpływ mojego kodu w innych miejscach, które wymagają Optional<Queue>
.
Czy istnieje dobry sposób na rozwinięcie tego zagnieżdżonego Opcjonalnie?