이니셜라이저 목록에서 정의되지 않은 생성자

이니셜라이저 목록에서 정의되지 않은 생성자

Dart 분석기가 내보내는 진단 중 하나인 undefined_constructor_in_initializer를 살펴볼게요. 생성자의 이니셜라이저 목록에서 상위 클래스(superclass)의 생성자를 호출했는데, 상위 클래스에 그 생성자가 정의되어 있지 않을 때 이 진단이 나타나요. 호출하려는 생성자의 이름을 확인해 보면 좋아요.

출처: undefined_constructor_in_initializer

본문

이 진단은 다음과 같은 메시지로 나타나요.

  • The class '{0}' doesn't have a constructor named '{1}'. (클래스 '{0}'에는 '{1}'이라는 이름의 생성자가 없어요.)
  • The class '{0}' doesn't have an unnamed constructor. (클래스 '{0}'에는 이름 없는(unnamed) 생성자가 없어요.)

설명

분석기는 생성자의 이니셜라이저 목록에서 상위 클래스 생성자를 호출했는데, 상위 클래스가 호출되는 생성자를 정의하지 않은 경우 이 진단을 내보내요.

예시

아래 코드는 A에 이름 없는 생성자가 없기 때문에 이 진단이 발생해요.

class A {
  A.n();
}

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

아래 코드는 Am이라는 이름의 생성자가 없기 때문에 이 진단이 발생해요.

class A {
  A.n();
}

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

자주 쓰는 해결 방법

상위 클래스에 호출해야 할 생성자가 정의되어 있다면, 호출하는 생성자를 그쪽으로 바꿔요.

class A {
  A.n();
}

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

상위 클래스에 적절한 생성자가 없다면, 호출되는 생성자를 정의해요.

class A {
  A.m();
  A.n();
}

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

더 알아보기