Kædning valgfri.ellerElseThrow
Det kunne implementeres direkte i den samme kæde, du ville få andre undtagelser. Nu er den selvfølgelig mindre læsbar end din første løsning, så du har en afvejning.
return getObject().map(obj -> Optional.ofNullable(obj.getNullableField())
.orElseThrow(() -> new IllegalStateException("Field is not present")))
.orElseThrow(() -> new IllegalStateException("Object not found!"));
I stedet for at indlejre, vil jeg foreslå en simpel sekvens for at løse det som:
var value = getObject()
.orElseThrow(() -> new IllegalStateException("Object not found!"));
return Optional.of(value) // ensured value check already
.map(CustomObject::getNullableField) // takes care ofNullable
.orElseThrow(() -> new IllegalStateException("Field is not present"));