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; } |
우선 모든 필드를 파라미터로 받아 객체를 생성하는 생성자를 부모 클래스에 만든다.
@Getter @Setter public class Animal { private String name; public Animal(String name) { this.name = name; } } |
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 |
댓글