롬복 @AllArgumentConstructor는 자식 클래스에서 super로 호출 하지 못한다

nawhew·2021년 9월 13일
0

롬복 사용 시 부모의 생성자를 호출 못하는 예제

아래의 예제에서 Parent를 상속받은 Child에서 Parent의 생성자를 호출 하지 못한다.

  • 부모클래스
@AllArgumentConstructor
public class Parent {
	public String a;
	public String b;
}
  • 자식클래스
public class Child extends Parent {
	public Child() {
		super("", ""); // 호출 불가능!
	}
}

롬복 사용시 부모의 생성자를 호출 할 수 없는 이유

how to Call super constructor in Lombok

위의 질문에 롬복 개발자가 남긴 답변

This is not possible in Lombok. Although it would be a really nice feature, it requires resolution to find the constructors of the super class. The super class is only known by name the moment Lombok gets invoked. Using the import statements and the classpath to find the actual class is not trivial. And during compilation you cannot just use reflection to get a list of constructors.
It is not entirely impossible but the results using resolution in val and @ExtensionMethod have taught us that is it hard and error-prone.
Disclosure: I am a Lombok developer.

  • 리플렉션을 사용 할 때 super class의 constructor를 호출 할 수 없어서, 롬복에선 지원하지 않는다.

    그로인해 롬복의 생성자 어노테이션을 사용 시 아래와 같은 제약사항이 생긴다.

롬복 생성자 어노테이션의 제약사항

  1. 자식클래스에서 롬복으로는 super()를 호출 할 수 없어, 자식클래스에서는 @AllArgumentContructor 를 사용 할 수 없다.
  2. 부모클래스에 있는 롬복으로 만든 생성자(@AllArgumentContructor등..)를 자식 클래스에서 (super()를) 호출 할 수 없다.
    • 부모 클래스에 @AllArgumentConstructor 가 아닌 직접 생성해준 생성자만 자식 클래스에서 호출 가능.

참고자료

profile
개인 기술 블로그 - 개념정리/프로젝트/테스트/오류/짧은지식

0개의 댓글