Java / Lombok Interview questions
What is the difference between @Getter(lazy = true) and a normal @Getter?
A normal @Getter just returns the field's current value directly. @Getter(lazy = true)
is meant for a field whose value is expensive to compute: it generates a getter that computes the value only
the first time it's called, caches the result, and returns the cached value on every subsequent call.
public class Config { @Getter(lazy = true) private final List<String> expensiveData = computeExpensiveData(); } // computeExpensiveData() only actually runs the first time getExpensiveData() is called
This requires the field to be final and assigned via an initializer expression, since Lombok
implements the caching using a specific double-checked-locking pattern under the hood, generating thread-safe
lazy initialization without you having to hand-write that pattern yourself — a genuinely tricky pattern
to get right manually.
More Related questions...