Java Spotbugs-可选设置上的空指针取消引用问题
我有一个简单的例子,但很难理解到底是什么错了,似乎检查了optional,但spotbug将其视为空指针解引用。也尝试过orElseThrow(),同样的事情Java Spotbugs-可选设置上的空指针取消引用问题,java,null,optional,dereference,spotbugs,Java,Null,Optional,Dereference,Spotbugs,我有一个简单的例子,但很难理解到底是什么错了,似乎检查了optional,但spotbug将其视为空指针解引用。也尝试过orElseThrow(),同样的事情 package com.bam; import java.util.HashSet; import java.util.Optional; import java.util.Set; import org.jetbrains.annotations.NotNull; public class Check { @NotNul
package com.bam;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import org.jetbrains.annotations.NotNull;
public class Check {
@NotNull
public Integer check() {
Optional<Integer> integer = find(3);
if (integer.isPresent()) {
return integer.get(); // here Spotbugs finds Null pointer dereference
}
throw new IllegalStateException("number not found!");
}
private Optional<Integer> find(Integer number) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
return set.stream()
.filter(integer -> integer.equals(number))
.findFirst();
}
}
package com.bam;
导入java.util.HashSet;
导入java.util.Optional;
导入java.util.Set;
导入org.jetbrains.annotations.NotNull;
公共类检查{
@NotNull
公共整数检查(){
可选整数=查找(3);
if(integer.isPresent()){
return integer.get();//spotbug在这里找到空指针解引用
}
抛出新的IllegalStateException(“找不到编号!”);
}
私有可选查找(整数){
Set=newhashset();
增加(1);
增加(2);
返回set.stream()
.filter(整数->整数.equals(数字))
.findFirst();
}
}
可选
具有用于此特定用例的API方法:
return find(3).orElseThrow(() -> new IllegalStateException("number not found!"));
你说你“尝试了或lsetrow
”,但是你没有发布你说你从SpotBugs得到的消息,而且由于该方法不能返回null,如果你得到了一个,那就是SpotBugs中的一个bug