이니셜라이저 목록에서 정의되지 않은 생성자
이니셜라이저 목록에서 정의되지 않은 생성자
Dart 분석기가 내보내는 진단 중 하나인 undefined_constructor_in_initializer를 살펴볼게요. 생성자의 이니셜라이저 목록에서 상위 클래스(superclass)의 생성자를 호출했는데, 상위 클래스에 그 생성자가 정의되어 있지 않을 때 이 진단이 나타나요. 호출하려는 생성자의 이름을 확인해 보면 좋아요.
본문
이 진단은 다음과 같은 메시지로 나타나요.
- 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();
}
아래 코드는 A에 m이라는 이름의 생성자가 없기 때문에 이 진단이 발생해요.
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();
}