Possiedo un oggetto facoltativo java che desidero ottenere solo se è presente. Il codice ovvia è:Java Opzionale Get if Present
JsonGenerator gen;
if(value.isPresent()) {
gen.writeObject(value.get());
}
Ma io voglio vedere se riesco a steamline che a 1 secondo il metodo ifPresent
. Non voglio che scriva del tutto se non è presente. Ho provato qualcosa di simile:
gen.writeObject(value.ifPresent(a -> a));
Ma chiaramente non ha funzionato. C'è un modo per fare ciò che voglio? Tutto ciò che ho cercato online mostra solo l'uso di ifPresent
con una chiamata al metodo per il predicato.
Edit 1: ho cercato la soluzione di Tunaki ma sto ottenendo il seguente errore:
Error:(25, 46) java: incompatible thrown types java.io.IOException in method reference
Ecco il mio intero blocco di codice:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
value.getFooA().ifPresent(gen::writeObject);
}
}
Ho anche provato:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
try {
value.getContactInfo().ifPresent(gen::writeObject);
} catch(IOException e) {
throw new UncheckedIOException(e);
}
}
}
Ma mi dà ancora l'errore.
ho provato la soluzione e ottenuto un errore , Ho apportato una modifica al mio post. – Richard
@Richard Ha sì se il tuo metodo genera un'eccezione controllata, devi prenderla e rilanciare una non controllata (o fare qualcos'altro). – Tunaki
perfetto, questo ha funzionato. Grazie!! – Richard