Required arguments with a Lombok @Builder

前端 未结 9 2489
天涯浪人
天涯浪人 2020-12-12 15:17

If I add @Builder to a class. The builder method is created.

Person.builder().name(\"john\").surname(\"Smith\").build();

I have a requirem

9条回答
  •  星月不相逢
    2020-12-12 16:10

    Take User class as example, id field is required:

    @AllArgsConstructor(access = AccessLevel.PRIVATE) // required, see https://stackoverflow.com/questions/51122400/why-is-lombok-builder-not-compatible-with-this-constructor
    @NoArgsConstructor(access = AccessLevel.PRIVATE)
    @Builder
    @Getter
    public class User {
        private String id;
        private String name;
        private int age;
    
        public static UserBuilder builder(final String id) {
            return new UserBuilder().id(id);
        }
    }
    

    You can only initialize a User instance by builder like User user = User.builder("id-123").name("Tom").build;. With private no args constructer, you are not able to User user = new User(); or User user = new User("id-123"); so you always need to pass the required parameter id. Please note the initialized instance is immutable.

提交回复
热议问题