¿Por qué IntelliJ dime que mi clase nunca vuelve nula?

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 Optionalpara 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 Optionalclase tiene dos métodos:

  • Optional.of -> ha producido una excepción si el parámetro es null
  • Optional.ofNullable -> crea un vacío opcional si el parámetro es null

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 ifdeclaración

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=315360&siteId=1
Recomendado
Clasificación