java - 为什么 IntelliJ 告诉我我的类从不返回 null?

标签 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);
        }
    }
}

IntelliJ 检查员告诉我 if 语句始终为真。它怎么知道的?这是化合物类:

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;
    }
}

和 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;
    }
}

如果我停止使用 Optional 来包装 verse.getCompounds() 结果,而是只进行 null 检查,检查消息就会消失。

我正在使用 Java 8。

最佳答案

Optional 类有两个方法:

  • Optional.of -> 如果参数为 null 则抛出异常
  • Optional.ofNullable -> 如果参数为 null
  • ,则创建一个空可选

因此,如果您的方法返回 null,of() 方法将抛出异常,并且空可选永远不会到达您的 if 语句

关于java - 为什么 IntelliJ 告诉我我的类从不返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775759/

相关文章:

java - 使用 HashSet 时如何保持插入顺序?

java - 如何为我的国际象棋游戏添加倒计时?

intellij-idea - JProfiler 在 IntelliJ 12 中不起作用(JProfiler 可执行文件为空)

elasticsearch - 错误 : Unrecognized VM option 'AggressiveOpts'

java - 编译时引发的内部错误(NullPointerException)intellij Idea

intellij-idea - 需要 IntelliJ IDEA 9 备忘单

java - Stringutils.join 替代方式

java - 将字符串从客户端传输到服务器时出现垃圾值

java - Kafka Log4j 附加程序不发送消息

java - Intellij Idea15 CE 无法启动 -XX :+UseG1GC