В моей текущей работе мы переписываем код на Java 8. Если у вас есть такой код:
if(getApi() != null && getApi().getUser() != null
&& getApi().getUser().getCurrentTask() != null)
{
getApi().getUser().getCurrentTask().pause();
}
вы можете просто переписать его на
Optional.ofNullable(this.getApi())
.map(Api::getUser)
.map(User::getCurrentTask)
.ifPresent(Task::pause);
без изменения поведения кода. но что, если что-то посередине может выбросить NPE, потому что оно не проверено на null?
например:
if(getApi() != null && getApi().getUser() != null
&& getApi().hasTasks())
{
getApi().getMasterUser(getApi().getUser()) //<- npe can be here
.getCurrentTask().pause();
}
Каков наилучший способ переписать такой код с помощью опций? (он должен работать точно так же и вызывать npe, когда getMasterUser(...)
возвращает null)
UPD второй пример:
if(getApi()!=null && getApi.getUser() != null)
{
if(getApi().getUser().getDepartment().getBoss() != null)// <- nre if department is null
{
getApi().getUser().getDepartment().getBoss().somefunc();
}
}
у него есть nullchecks для api, пользователя, босса, но не отдела. как это можно сделать с помощью опций?