Java / Lombok Interview questions
How does Lombok handle @ToString with circular references?
Lombok's @ToString doesn't have built-in circular reference detection — if class A has
a @ToString-included field pointing to class B, and B has a field pointing back to A, calling
toString() on either one recurses infinitely (A's toString calls B's toString, which calls A's
toString, and so on) until it overflows the stack with a StackOverflowError.
@ToString public class Parent { private List<Child> children; // danger: each Child references parent back } @ToString public class Child { @ToString.Exclude // break the cycle here private Parent parent; private String name; }
The standard fix is exactly what's shown above: use @ToString.Exclude on whichever side of the
bidirectional relationship you don't need printed — typically the "back-reference" side (child pointing
to parent) — so the generated toString() never actually walks the cycle in the first place.
More Related questions...