Ich habe ein Java-optionales Objekt, das ich nur bekommen möchte, wenn es vorhanden ist. Der offensichtliche Code ist hier:Java Optional Erhalten, wenn vorhanden
JsonGenerator gen;
if(value.isPresent()) {
gen.writeObject(value.get());
}
Aber ich will sehen, ob ich die 1 Zeile mit dem ifPresent
Verfahren kann Steamline. Ich möchte nicht, dass es überhaupt schreibt, wenn es nicht vorhanden ist. Ich habe so etwas versucht:
gen.writeObject(value.ifPresent(a -> a));
Aber das hat eindeutig nicht funktioniert. Gibt es eine Möglichkeit zu tun, was ich will? Alles, was ich online recherchiert habe, zeigt nur die Verwendung von ifPresent
mit einem Methodenaufruf für das Prädikat.
Edit 1: versuchte ich Tunaki Lösung, aber ich die folgende Fehlermeldung erhalten:
Error:(25, 46) java: incompatible thrown types java.io.IOException in method reference
Hier ist mein ganzer Block von Code:
public class FooSerializer extends JsonSerializer<Foo> {
@Override
public void serialize(Foo value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException {
value.getFooA().ifPresent(gen::writeObject);
}
}
Ich habe sogar versucht:
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);
}
}
}
Aber es gibt mir immer noch der Fehler.
value.ifPresent(gen::writeObject);
Dies wird berufen sich auf die Methode nur, wenn die Optional
nicht leer ist:
Ich habe versucht, Ihre Lösung und bekam einen Fehler Ich habe eine Änderung an meinem Post vorgenommen. – Richard
@Richard Ha ja, wenn Ihre Methode eine geprüfte Ausnahme auslöst, müssen Sie sie abfangen und eine unmarkierte Ausnahme erneut ausführen (oder etwas anderes tun). – Tunaki
perfekt, das hat funktioniert. Vielen Dank!! – Richard