생성자(generative constructor)가 필요한 자리에 factory 가 발견됐어요

생성자(generative constructor)가 필요한 자리에 factory 가 발견됐어요

생성자의 초기화 리스트(initializer list)가 상위 클래스의 생성자를 호출했는데, 그 호출 대상이 factory 생성자일 때 분석기가 알려주는 진단이에요.

출처: non_generative_constructor

본문

생성자의 초기화 리스트가 상위 클래스의 생성자를 호출하는데, 그 호출된 생성자가 factory 생성자일 때 이 진단이 발생해요. 초기화 리스트에서는 생성자(generative constructor)만 호출할 수 있어요.

아래 코드는 super.one() 호출이 factory 생성자를 호출하기 때문에 이 진단이 나와요.

class A {
  factory A.one() = B;
  A.two();
}

class B extends A {
  B() : super.one();
}

고치는 방법

super 호출이 생성자(generative constructor)를 호출하도록 바꿔 주면 돼요.

class A {
  factory A.one() = B;
  A.two();
}

class B extends A {
  B() : super.two();
}

만약 생성자가 이름 없는 생성자(unnamed constructor)이고, 전달하는 인자도 없다면 super 호출 자체를 제거해도 돼요.

더 알아보기

  • 생성자와 factory 생성자에 대한 자세한 내용은 Dart 공식 문서의 constructors 자료를 참고해요.