no_generative_constructors_in_superclass 진단: superclass에 generative 생성자가 없을 때
no_generative_constructors_in_superclass 진단: superclass에 generative 생성자가 없을 때
Dart 분석기가 내보내는 진단에는 이름이 있어요. no_generative_constructors_in_superclass는 generative 생성자(명시적이든 암시적이든)를 하나 이상 가진 클래스가, generative 생성자를 하나도 가지지 않은 superclass를 가질 때 분석기가 알려주는 진단이에요. 서브클래스의 생성자는 superclass의 생성자를 호출해야 하는데 그게 불가능하거든요.
본문
설명
분석기는 generative 생성자(명시적이든 암시적이든)를 하나 이상 가진 클래스가, generative 생성자를 하나도 가지지 않은 superclass를 가질 때 이 진단을 만들어요. Object에 정의된 생성자를 제외한 모든 generative 생성자는, 명시적으로든 암시적으로든 자신의 superclass의 generative 생성자 하나를 호출해요.
예시
아래 코드는 클래스 B가 A에서 generative 생성자를 호출할 수 없는데 이 진단을 만들어요. B의 암시적 generative 생성자가 A의 generative 생성자를 호출하려 하는데, A에는 generative 생성자가 하나도 없기 때문이에요.
class A {
factory A.none() => throw '';
}
class B extends A {}
흔한 해결 방법
superclass에 generative 생성자가 있어야 한다면, 하나를 추가해요.
class A {
A();
factory A.none() => throw '';
}
class B extends A {}
서브클래스에 generative 생성자가 없어야 한다면, factory 생성자를 추가해서 서브클래스의 생성자를 없애요.
class A {
factory A.none() => throw '';
}
class B extends A {
factory B.none() => throw '';
}
서브클래스에 generative 생성자가 꼭 있어야 하는데 superclass에는 만들 수 없다면, superclass를 extends 대신 implements해요.
class A {
factory A.none() => throw '';
}
class B implements A {}