제네러티브 생성자가 팩토리 생성자로 리다이렉트할 수 없음
제네러티브 생성자가 팩토리 생성자로 리다이렉트할 수 없음 (redirect_generative_to_non_generative_constructor)
이 문서는 Dart 분석기(analyzer)가 내는 redirect_generative_to_non_generative_constructor 진단(diagnostic)을 설명하는 문서예요. 제네러티브(generative) 생성자가 팩토리(factory) 생성자로 리다이렉트할 때 분석기가 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.
본문
진단 메시지
Generative constructors can't redirect to a factory constructor.
제네러티브 생성자는 팩토리 생성자로 리다이렉트할 수 없어요.
설명
분석기는 제네러티브 생성자가 팩토리 생성자로 리다이렉트할 때 이 진단을 만들어 내요. 제네러티브 생성자는 객체를 실제로 할당해서 만드는 생성자이고, 팩토리 생성자는 객체를 만들지 않을 수도 있는 성격이 달라서, 이 둘 사이에는 리다이렉트가 성립하지 않아요.
예시
다음 코드는 제네러티브 생성자 C.a가 팩토리 생성자 C.b로 리다이렉트하기 때문에 이 진단을 만들어 내요.
class C {
C.a() : this.b();
factory C.b() => C.a();
}
일반적인 해결 방법
제네러티브 생성자가 다른 생성자로 리다이렉트할 필요가 없다면, 리다이렉트를 제거하면 돼요.
class C {
C.a();
factory C.b() => C.a();
}
만약 제네러티브 생성자가 반드시 다른 생성자로 리다이렉트해야 한다면, 그 대상 생성자를 제네러티브(팩토리가 아닌) 생성자로 만들어 주세요.
class C {
C.a() : this.b();
C.b();
}
더 알아보기
- Dart 분석기 진단 목록에서 다른 진단들도 함께 살펴보세요.
- 제네러티브 생성자와 팩토리 생성자, 리다이렉트의 차이는 Dart 공식 문서의 생성자 문서를 참고해요.