Java / Lombok Interview questions
What is the difference between @NoArgsConstructor, @AllArgsConstructor, and @RequiredArgsConstructor?
All three generate a constructor, but they differ in which fields end up as parameters.
| @NoArgsConstructor | @RequiredArgsConstructor | @AllArgsConstructor |
| No parameters at all. | Only final fields and @NonNull fields without a default. | Every field, in declaration order. |
| Useful for frameworks needing a default constructor. | Useful for constructor-injection style, or enforcing required values at construction. | Useful for a fully-populating constructor, or as the delegate target for @Builder. |
public class Person { private final String id; // required private String name; // not required private int age; // not required } // @NoArgsConstructor -> Person() // @RequiredArgsConstructor -> Person(String id) // @AllArgsConstructor -> Person(String id, String name, int age)
It's common to combine two or three of these on the same class to support multiple valid ways of constructing it, depending on what a given caller (application code vs. a framework) actually needs.
More Related questions...