#java #intellij-idea
#java #intellij-идея
Вопрос:
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 всегда имеет значение true. Как он может это знать? Это класс 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;
}
}
И класс 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.
Ответ №1:
Optional
Класс имеет два метода:
Optional.of
-> выдает исключение, если параметр равенnull
Optional.ofNullable
-> создает пустой необязательный параметр, если параметрnull
Следовательно, если ваш метод возвращает null, of()
метод выдаст исключение, и empty optional никогда не достигнет вашего if
оператора
Ответ №2:
Optional.of(verse.getCompounds());
возвращает Optional
значение, содержащее допустимое значение.
Следующая isPresent
проверка всегда будет истинной, потому Optional
compounds
что никогда не будет иметь значения, поскольку вы просто устанавливаете для него допустимое значение в строке выше.
Комментарии:
1. Ах, я думаю, что я имел в виду использовать
ofNullable
, вместоof
2. @Sahand Да, это имело бы больше смысла.