如何将代码重写为可选?
2022-09-03 02:35:17
在我目前的工作中,我们正在将一些代码重写为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,因为它没有被检查为空,该怎么办?
例如:
if(getApi() != null && getApi().getUser() != null
&& getApi().hasTasks())
{
getApi().getMasterUser(getApi().getUser()) //<- npe can be here
.getCurrentTask().pause();
}
使用可选选项重写此类代码的最佳方法是什么?(它应该工作完全相同,并在返回 null 时抛出 npe)getMasterUser(...)
UPD 第二个例子:
if(getApi()!=null && getApi.getUser() != null)
{
if(getApi().getUser().getDepartment().getBoss() != null)// <- nre if department is null
{
getApi().getUser().getDepartment().getBoss().somefunc();
}
}
它对api,user,boss有空检查,但没有部门。如何使用可选选项进行制作?