在访问值之前调用“optional#ispresent()”

szqfcxe2  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(582)

这个问题在这里已经有答案了

'optional.get()'不带'ispresent()'检查(4个答案)
三年前关门了。
在访问下面代码段的sonar问题中的值之前,我将得到call“optional#ispresent()”,请帮助我解决此问题。

List <Department> deptList =new ArrayList();

List<Student> studList=new ArrayList();

Department dept= studList.stream().min(comparator.comparing(Department::getDepartmentNo)).get();

在访问值之前调用“optional#ispresent()”。

uqxowvwt

uqxowvwt1#

Optional#get() 如果optional中没有任何内容,则引发异常。sonar希望您在获得下面代码段中的值之前检查可选值,但我不建议您将其作为 Optional 类用于防止空指针异常

Optional<Department> deptOpt= studList.stream().min(comparator.comparing(Department::getDepartmentNo));

Department department = null;
if(deptOpt.isPresent())
    department = deptOpt.get();
}

一个更好的做事方式是:

Department department = deptOpt.orElse(Department::new);

在本例中,如果optional不包含任何值(为空),deptopt将返回默认的department对象。
不管怎样-无论你选择什么方法都应该解决你的声纳问题。

mwecs4sa

mwecs4sa2#

要使代码正常工作,请至少使用option中的一个安全选项(ha,此处允许单词冗余)

Department dept= studList.stream().min(comparator.comparing(Department::getDepartmentNo)).orElse(null);

其中“null”应该是空列表的一个值,我不知道上下文,这就是为什么我把null放在这里,请不要用null!,选择正确的值

相关问题