no_generative_constructors_in_superclass 진단: superclass에 generative 생성자가 없을 때

no_generative_constructors_in_superclass 진단: superclass에 generative 생성자가 없을 때

Dart 분석기가 내보내는 진단에는 이름이 있어요. no_generative_constructors_in_superclassgenerative 생성자(명시적이든 암시적이든)를 하나 이상 가진 클래스가, generative 생성자를 하나도 가지지 않은 superclass를 가질 때 분석기가 알려주는 진단이에요. 서브클래스의 생성자는 superclass의 생성자를 호출해야 하는데 그게 불가능하거든요.

출처: no_generative_constructors_in_superclass

본문

설명

분석기는 generative 생성자(명시적이든 암시적이든)를 하나 이상 가진 클래스가, generative 생성자를 하나도 가지지 않은 superclass를 가질 때 이 진단을 만들어요. Object에 정의된 생성자를 제외한 모든 generative 생성자는, 명시적으로든 암시적으로든 자신의 superclass의 generative 생성자 하나를 호출해요.

예시

아래 코드는 클래스 BA에서 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 {}

더 알아보기