기본 생성자가 호출하는 상위 클래스의 생성자가 factory 였어요
기본 생성자가 호출하는 상위 클래스의 생성자가 factory 였어요
클래스에 암시적 생성자(implicit generative constructor)가 있는데, 상위 클래스에 명시적인 이름 없는 factory 생성자가 있을 때 분석기가 알려주는 진단이에요.
본문
클래스에 암시적 생성자가 있고, 상위 클래스에 명시적인 이름 없는 factory 생성자가 있을 때 이 진단이 발생해요. 하위 클래스의 암시적 생성자는 상위 클래스의 이름 없는 생성자를 암시적으로 호출하는데, 생성자는 factory 생성자가 아니라 또 다른 생성자만 호출할 수 있거든요.
아래 코드는 B 의 암시적 생성자가 A 의 이름 없는 생성자를 호출하는데, A 의 그 생성자는 factory 생성자라서 이 진단이 나와요. 여기서는 생성자가 필요하거든요.
class A {
factory A() => throw 0;
A.named();
}
class B extends A {}
고치는 방법
상위 클래스의 이름 없는 생성자를 생성자로 만들 수 있다면, 그렇게 바꿔 주면 돼요.
class A {
A();
A.named();
}
class B extends A {}
이름 없는 생성자를 생성자로 바꿀 수 없는데 상위 클래스에 다른 생성자가 있다면, 그 중 하나를 명시적으로 호출하면 돼요.
class A {
factory A() => throw 0;
A.named();
}
class B extends A {
B() : super.named();
}
사용할 수 있는 생성자가 없고 새로 추가할 수도 없다면, 상위 클래스를 상속(extend)하는 대신 구현(implement)하면 돼요.
class A {
factory A() => throw 0;
A.named();
}
class B implements A {}
더 알아보기
- 생성자, factory 생성자, 그리고 extends/implements 구분에 대한 자세한 내용은 Dart 공식 문서의 constructors 자료를 참고해요.