Почему IntelliJ говорит мне, что мой класс никогда не возвращает ноль? - PullRequest
1 голос
/ 20 апреля 2019
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;
    }
}

И стих стих:

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(), и вместо этого просто выполню нулевую проверку, инспекционное сообщение исчезнет.

Я использую Java 8.

Ответы [ 2 ]

6 голосов
/ 20 апреля 2019

Класс Optional имеет два метода:

  • Optional.of -> выдает исключение, если параметр null
  • Optional.ofNullable -> создает пустой необязательный параметр, если null

Следовательно, если ваш метод возвращает значение NULL, метод of() сгенерирует исключение, и пустая опция не будет достигать вашего if оператора

2 голосов
/ 20 апреля 2019

Optional.of(verse.getCompounds()); возвращает Optional, который содержит действительное значение.

Следующая проверка isPresent всегда будет истинной, поскольку Optional compounds никогда не будет иметь значения, посколькуВы просто устанавливаете его на действительное значение в строке выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...