为什么IntelliJ告诉我我的班从不返回null?

Sah*_*and 1 java intellij-idea

private void addCompoundsFrom(Verse verse) {
    Optional<List<Compound>> compounds = Optional.of(verse.getCompounds());
    if (compounds.isPresent()) {
        for (Compound compound : compounds.get()) {
            addCompoundsFrom(compound);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

IntelliJ检查器告诉我,if语句始终为真。它怎么知道呢?这是Compounds类:

public class Compounds extends PositionalIds {

    @XmlElement(name = "verse")
    private List<Verse> verses;

    public List<Verse> getVerses() {
        return verses;
    }
}


@XmlTransient
public abstract class PositionalIds {

    @XmlAttribute(name = "start")
    private String startId;

    @XmlAttribute(name = "end")
    private String endId;

    public String getStartId() {
        return startId;
    }

    public String getEndId() {
        return endId;
    }
}
Run Code Online (Sandbox Code Playgroud)

和Verse类:

public class Verse extends PositionalIds {

    @XmlElement(name = "compound")
    private List<Compound> compounds;

    @XmlAttribute(name = "notation")
    private String notation;

    public List<Compound> getCompounds() {
        return compounds;
    }

    public String getNotation() {
        return notation;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我停止使用Optional自动换行verse.getCompounds()结果,而只是进行空检查,检查消息就会消失。

我正在使用Java 8。

Sve*_*rev 6

Optional类有两个方法:

  • Optional.of ->如果参数为 null
  • Optional.ofNullable ->如果参数是 null

因此,如果您的方法返回null,则该of()方法将引发异常,而空的optional将永远不会到达您的if语句