将字段设置为Null时的Java Null取消引用-加强

将字段设置为Null时的Java Null取消引用-加强,java,fortify,Java,Fortify,当我将字段设置为Null时,Fortify正在抱怨Null取消引用: String sortName = null; if (lastName != null && lastName.length() > 0) { sortName = lastName; } sortOptions.setSortField(sortName); <-- Fortify Null Dereference 我可以试试: if (sortName == null) so

当我将字段设置为Null时,Fortify正在抱怨Null取消引用:

String sortName = null;
if (lastName != null && lastName.length() > 0) {
   sortName = lastName;
}
sortOptions.setSortField(sortName);  <--  Fortify Null Dereference
我可以试试:

if (sortName == null)
   sortOptions.setSortField(null);
else
   sortOptions.setSortField(sortName);

但这似乎真的很愚蠢。有人有这方面的经验吗?我更愿意放弃这个发现,而不是直接将其注销。

fortify不喜欢的是,您首先无条件地使用
null
初始化变量,然后更改它

这应该起作用:

String sortName;
if (lastName != null && lastName.length() > 0) {
   sortName = lastName;
} else {
   sortName = null;
}
sortOptions.setSortField(sortName);
(如果愿意,也可以使用三元运算符)

这样,您只需初始化一次
sortName
,并明确表明
null
值在某些情况下是正确的,而不是您忘记了某些情况,导致var在意外情况下保持
null


空解引用错误位于代码
sortName=lastName的行上
不是setter的调用:fortify不希望您有条件地更改设置为
null
的变量的值,而不在所有分支中这样做。

Thierry的答案非常有效。这也通过了Fortify的扫描:

Optional<String> sortName = Optional.empty();
if (lastName != null && lastName.length() > 0) {
   sortName = Optional.ofNullable(lastName);
}
sortOptions.setSortField(sortName.orElse(null));
Optional sortName=Optional.empty();
if(lastName!=null&&lastName.length()>0){
sortName=可选。不可用(姓氏);
}
sortOptions.setSortField(sortName.orElse(null));

如果将空值传递到
setSortField
中会导致空指针,那么将显式空值传递到中将执行相同的操作。请显示a。如果仅为了测试,您执行
String sortName=“”添加了Fortify的分析跟踪,这表明取消对sortName的引用是问题所在。我们在代码中的许多地方将字段设置为“null”,而Fortify在这方面做得很好。我将尝试这个解决方案。不幸的是,我们的强化扫描需要几个小时才能运行。我会尽快更新我有更多的信息。。。thx Thierry此溶液通过强化扫描。谢谢你的意见!您应该能够在此处使用
Optional.of
而不是
of nullable
,因为您已经检查过它是否为空。
Optional<String> sortName = Optional.empty();
if (lastName != null && lastName.length() > 0) {
   sortName = Optional.ofNullable(lastName);
}
sortOptions.setSortField(sortName.orElse(null));