Próbuję zrozumieć sposobu Optional
API ifPresent()
w Javie 8.Prawidłowe wykorzystanie Optional.ifPresent()
mam prostą logikę:
Optional<User> user=...
user.ifPresent(doSomethingWithUser(user.get()));
Ale to powoduje błąd kompilacji :
ifPresent(java.util.functionError:(186, 74) java: 'void' type not allowed here)
oczywiście mogę zrobić coś takiego:
if(user.isPresent())
{
doSomethingWithUser(user.get());
}
Ale to jest dokładnie tak, jak zagracone sprawdzanie null
.
Gdybym zmienić kod na to:
user.ifPresent(new Consumer<User>() {
@Override public void accept(User user) {
doSomethingWithUser(user.get());
}
});
Kod jest coraz brudniejsze, co sprawia, że myślę o powrocie do starego null
czeku.
Wszelkie pomysły?
Ten kod się zagraca. Sprawdzenie wartości zerowej będzie znacznie czystsze. nie sądzisz? s specjalnie, że doSomethingWithUser nie jest metodą statyczną. – rayman
Który kod?Ten, którego powinieneś użyć, to drugi, który wywołuje instancję (tzn. Niestatyczną) metodę doSomethingWithUser(). Nie rozumiem, jak jest zagracony. Ostatni kod zawiera wyjaśnienie ekwiwalentu lambda w świecie przed lambdą. Nie używaj go. –
Ahh rozumiem cię. Jeśli nie jestem w świecie lambda, nie ma możliwości używania Opcjonalnego api eh – rayman