상세 컨텐츠

본문 제목

[ERROR] @Builder와 @NoArgsConstructor 동시에 사용할 때

JAVA/SPRING

by ranlan 2021. 8. 24. 18:49

본문

728x90

문제

빌더 패턴 공부하고 적용해보겠답시고 빌더 어노테이션을 쓴 뒤 실행하자 발생한 오류

 

error: constructor CommentDto in class CommentDto cannot be applied to given types;
@Builder
^
  required: no arguments
  found: Long,String,String,String,String,Long
  reason: actual and formal argument lists differ in length

 

오류가 나고있는 부분은 CommentDto class 부분

 

@Builder@NoArgsConstructor 어노테이션을 함께 사용하면서 모든 멤버 변수를 받는 생성자가 없어서 터지는 오류이다.

뿐만 아니라 일부 멤버변수만 갖는 생성자를 가질때에도 해당 오류가 난다.

 

lombok 공식 홈페이지 builder 부분에 의하면 https://projectlombok.org/features/Builder

 

@Builder

 

projectlombok.org

Finally, applying @Builder to a class is as if you added @AllArgsConstructor(access = AccessLevel.PACKAGE) to the class and applied the @Builder annotation to this all-args-constructor. This only works if you haven't written any explicit constructors yourself. If you do have an explicit constructor, put the @Builder annotation on the constructor instead of on the class. Note that if you put both '@Value' and '@Builder' on a class, the package-private constructor that '@Builder' wants to generate 'wins' and suppresses the constructor that '@Value' wants to make.

 

여러 구글링과 공식 문서를 보면 @AllArgsConstructor 어노테이션이 상황에 따라 적용되도록 되어있는데..

@NoArgsConstructor가 오면서 안되는거같기도.. 어디서 보면 setter가 없어서 그런거라고도 하는데 암튼 그런가봉가

 

아래 링크 잇듬

 

 

해결

해결은 간단하다. 모든 멤버 변수가 매개변수로 있는 생성자를 직접 작성하던가 @AllArgsConstructor 어노테이션을 추가해주면 된다.

 

여기서 잠깐!

 

#### 생성자 관련 어노테이션 정리 ###

 

@RequiredArgsConstructor

초기화되지 않은 final이나 NonNull의 생성자를 생성하여 의존성 주입 시 사용

* @NonNull 필드들은 추가적인 null check 로직이 생성되어 null값이 들어오면 NullPointException 발생

 

@AllArgsConstructor

모든 필드에 대한 생성자 생성

* @NonNull 필드들은 자동으로  null check 로직 생성

 

@NoArgsConstructor

파라미터가 없는 생성자 생성

필드들이 final로 생성되어 있는 경우 필드를 초기화할 수 없어 생성자를 만들 수 없고 에러 발생 → @NoArgsConstructor(force=true)

@NonNull 처럼 필드에 제약조건이 설정되어 있는 경우 생성자 내 null check 로직이 생성되지 않음

 

##########################

 

 

참고

https://github.com/projectlombok/lombok/issues/1389

 

It can not work when @NoArgsConstructor and @Builder and@Data added · Issue #1389 · projectlombok/lombok

just like this pic I found it will not work for applying constructor method something wrong hints: @DaTa has public constructor without args ,however , i need create a private no args constructor t...

github.com

https://yuja-kong.tistory.com/99

 

[Lombok] @Builder 사용 시 @NoArgsConstructor 관련 에러 해결

Spring Boot로 개발 시 Lombok의 @Builder를 사용할 때 자주 마주치는 에러가 있다. 바로.. 아래와 같은 에러 ! 에러 Error:(7, 1) java: constructor MyName in class kr.leocat.test.MyName cannot be applied t..

yuja-kong.tistory.com

 

728x90

관련글 더보기

댓글 영역