Java Spotbugs-可选设置上的空指针取消引用问题

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

我有一个简单的例子,但很难理解到底是什么错了,似乎检查了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 {

    @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