【问题标题】:Spotbugs - Null pointer dereference issue on OptionalSpotbugs - Optional 上的空指针取消引用问题
【发布时间】:2021-08-04 22:39:10
【问题描述】:

我有一个简单的案例,但很难理解哪里出了问题,似乎检查了可选,但是 Spotbugs 认为这是空指针取消引用。也试过 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();
    }
}

【问题讨论】:

    标签: java null optional dereference spotbugs


    【解决方案1】:

    Optional 有一个针对这个特定用例的 API 方法:

    return find(3).orElseThrow(() -> new IllegalStateException("number not found!"));
    

    您说您“尝试过orElseThrow”,但您没有发布您说您从 SpotBugs 获得的消息,并且由于该方法不能返回 null,如果您正在得到一个,这是 SpotBugs 中的一个错误。

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多