implicit_super_initializer_missing_arguments 진단: super 초기화에 필요한 인자를 넘기지 않았어요
implicit_super_initializer_missing_arguments 진단: super 초기화에 필요한 인자를 넘기지 않았어요
하위 클래스의 생성자가 상위 클래스의 **이름 없는 생성자(unnamed constructor)**를 암묵적으로 호출하는데, 그 생성자에 필수(required) 매개변수가 있고 그에 맞는 super 매개변수가 없다면 Dart 분석기가 이 진단을 내보내요. 상위 생성자가 값을 꼭 받아야 하는데 그 값을 넘겨줄 방법이 없으니, 컴파일 타임에 알려주는 거예요.
본문
설명
생성자가 상위 클래스의 이름 없는 생성자를 암묵적으로 호출하는 상황에서, 상위 생성자에 필수 매개변수가 있는데 그에 대응하는 super 매개변수가 없으면 이 진단이 만들어져요.
예시
다음 코드는 클래스 B의 이름 없는 생성자가 클래스 A의 이름 없는 생성자를 암묵적으로 호출하는데, A의 생성자에 x라는 필수 위치 매개변수(required positional parameter)가 있어서 이 진단을 만들어요.
class A {
A(int x);
}
class B extends A {
B();
}
다음 코드도 마찬가지로 B의 이름 없는 생성자가 A의 이름 없는 생성자를 암묵적으로 호출하는데, 이번에는 A의 생성자에 x라는 필수 이름 매개변수(required named parameter)가 있어서 이 진단을 만들어요.
class A {
A({required int x});
}
class B extends A {
B();
}
흔한 해결 방법
하위 클래스의 생성자에 매개변수를 추가할 수 있다면, 상위 생성자의 필수 매개변수에 대응하는 super 매개변수를 추가해요. 새 매개변수는 필수로 만들 수도 있고,
class A {
A({required int x});
}
class B extends A {
B({required super.x});
}
선택(optional)으로 만들 수도 있어요.
class A {
A({required int x});
}
class B extends A {
B({super.x = 0});
}
하위 클래스의 생성자에 매개변수를 추가할 수 없다면, 필요한 인자를 넣은 명시적인 super 생성자 호출을 사용해요.
class A {
A(int x);
}
class B extends A {
B() : super(0);
}