W mojej obecnej pracy jesteśmy przepisanie kodu Java 8. Jeśli masz kodu:Jak przepisać kod na opcje?
if(getApi() != null && getApi().getUser() != null
&& getApi().getUser().getCurrentTask() != null)
{
getApi().getUser().getCurrentTask().pause();
}
można po prostu przepisać go do
Optional.ofNullable(this.getApi())
.map(Api::getUser)
.map(User::getCurrentTask)
.ifPresent(Task::pause);
bez zmiany zachowań kodu. ale co, jeśli coś na środku może rzucić NPE, ponieważ nie jest zaznaczone na zero?
na przykład:
if(getApi() != null && getApi().getUser() != null
&& getApi().hasTasks())
{
getApi().getMasterUser(getApi().getUser()) //<- npe can be here
.getCurrentTask().pause();
}
co jest najlepszym sposobem, aby przepisać kod takiego korzystania ewentualne, (powinien działać dokładnie tak samo i rzucać NPE kiedy getMasterUser(...)
zwraca null)
UPD Drugi przykład:
if(getApi()!=null && getApi.getUser() != null)
{
if(getApi().getUser().getDepartment().getBoss() != null)// <- nre if department is null
{
getApi().getUser().getDepartment().getBoss().somefunc();
}
}
ma wartości zerowe dla api, użytkownika, szefa, ale n z działu. jak to zrobić za pomocą opcji?
Pierwszy wiersz kodu ma bitową wartość AND, czy to prawda? – Mike
Oczywiście to był błąd @Mike – maxpovver
Czy nie powinno być 'Opcjonalne.Niebłyski (this :: getApi)' zamiast 'Opcjonalnie.Niepliku (this.getApi())'? –