Dhrumil Upadhyaya Dhrumil Upadhyaya - 3 months ago 21
Java Question

Optional in Lombok

I have a class call Address which looks like this:

@Value
class Address {

@NotNull String userId;
@NotNull String line1;
String line2;

private Address(Builder b) {
// copy everything from builder
}

// override getter for line2 so that it returns Optional<String>
public Optional<String> getLine2() {
return Optional.fromNullable(this.line2);
}

// and a Builder
public static class Builder {
// builder methods
}
}


Here I am forced to write
Builder
and a
Getter
because, if I want to return an Optional while using Lombok, I will have to declare
line2
as
Optional<String>
. And that will generate a builder method which accepts
Optional<String>
!

Is there any other way to use lombok with Optional?

Answer

The answer is no, and it probably never will.

You're probably doing it wrong :-) Optional is not a replacement for null nor a fancy way to prevent NullPointerException. It is to indicate that the question is unanswerable, like: what is the average age of an empty list of persons.

Optionals should never be passed on, but unboxed by the calling code as soon as possible.

See also https://www.voxxed.com/blog/2015/01/embracing-void-6-refined-tricks-dealing-nulls-java/

Since these scenarios are just a handful, and Lombok likes to enable programmers to write better code, I don't expect there will ever be support for it in Lombok.

Disclosure: I am a Lombok developer.