본문 바로가기
Back-End (web)

@Builder 상속에 사용하기

by 햄과함께 2018. 11. 1.
320x100
@Getter
@Setter
public class Animal {
    String name;
}
cs

Animal 클래스가 있고

 

@Getter
@Setter
@Builder
public class Dog extends Animal {
    String type;
}
cs

Animal 클래스를 상속받는 Dog 클래스가 있다고 하자.

 

 

 

Dog 클래스 객체를 롬복의 Builder로 생성할 때 위와 같이 에러가 난다.

부모 클래스인 Animal에 선언한 name을 Builder가 알아보지 못해서 나는 에러이다.

 

해결 방법은 다음과 같다.

 

@Getter
@Setter
@AllArgsConstructor
public class Animal {
    String name;
}

cs 

우선 모든 필드를 파라미터로 받아 객체를 생성하는 생성자를 부모 클래스에 만든다.


@Getter
@Setter
public class Animal {
    private String name;
 
    public Animal(String name) {
        this.name = name;
    }
}

cs

AllArgsConstructor 어노테이션으로 생성된 생성자는 위 코드와 같다.


@Getter
@Setter
public class Dog extends Animal {
    String type;
 
    @Builder
    public Dog(String name, String type) {
        super(name); // 부모 클래스 생성자 호출
        this.type = type; // 추가된 필드
    }
cs

 

자식 객체 Dog에서는 위와 같이 코딩해주면 된다.

모든 필드를 입력으로 받고 부모 클래스의 필드는 부모 클래스 생성자를 호출하면서 해당 생성자의 파라미터로 넘겨준다. (super 호출)

새로 추가된 필드는 값을 세팅해준다.


참고 : Lombok @Builder with Inheritance




320x100

'Back-End (web)' 카테고리의 다른 글

[TEST] spock test example  (0) 2019.01.11
[Kotlin] Default argument (디폴트 매개변수)  (0) 2019.01.06
[Spock][Error] CannotCreateMockException  (0) 2019.01.03
[Kotlin] List, MutableList  (0) 2018.12.31
window gradle 설치  (0) 2018.11.05

댓글