Sahand:
private void addCompoundsFrom(Verse verse) {
Optional<List<Compound>> compounds = Optional.of(verse.getCompounds());
if (compounds.isPresent()) {
for (Compound compound : compounds.get()) {
addCompoundsFrom(compound);
}
}
}
El inspector de IntelliJ me dice que la sentencia if es siempre verdad. ¿Cómo puede saber eso? Esta es la clase de compuestos:
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;
}
}
Y la clase Verso:
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;
}
}
Si dejo de usar Optional
para envolver el verse.getCompounds()
resultado y en lugar de simplemente hacer un cheque nulo, el mensaje de inspección desaparece.
Estoy usando Java 8.
Svetlin Zarev:
La Optional
clase tiene dos métodos:
Optional.of
-> ha producido una excepción si el parámetro esnull
Optional.ofNullable
-> crea un vacío opcional si el parámetro esnull
Por lo tanto si sus devuelve el método nulo, el of()
método va a lanzar una excepción y opcional vacío nunca alcanzará su if
declaración