대응하는 위치 매개변수가 없는 super 매개변수

대응하는 위치 매개변수가 없는 super 매개변수

Dart 분석기(analyzer)가 만들어 내는 이 진단은, 생성자에서 위치 지정 super 매개변수를 썼는데 그에 대응하는 위치 매개변수가 슈퍼 생성자에 없을 때 알려줘요. super 매개변수가 실제로 연결될 자리가 없는 상황이라서 짚고 넘어가야 할 부분이에요.

출처: super_formal_parameter_without_associated_positional

본문

진단 메시지는 "No associated positional super constructor parameter." 즉 "대응하는 위치 지정 슈퍼 생성자 매개변수가 없어요."라는 뜻이에요.

설명

생성자에 위치 지정 super 매개변수가 있는데, (명시적으로든 암시적으로든) 호출되는 슈퍼 생성자에 해당 인덱스의 위치 매개변수가 없을 때 이 진단이 나와요.

위치 지정 super 매개변수는 슈퍼 생성자의 위치 매개변수와 인덱스로 연결돼요. 즉 첫 번째 super 매개변수는 슈퍼 생성자의 첫 번째 위치 매개변수와, 두 번째는 두 번째와, 이런 식으로 차례로 이어지죠.

예시

다음 코드는 생성자 B에 위치 지정 super 매개변수가 있는데, 슈퍼 생성자인 A에는 위치 매개변수가 없어서 이 진단이 나와요:

class A {
  A({int? x});
}

class B extends A {
  B(super.x);
}

다음 코드는 생성자 B에 위치 지정 super 매개변수가 두 개인데, 슈퍼 생성자인 A에는 위치 매개변수가 하나뿐이라 y에 대응하는 매개변수가 없어서 이 진단이 나와요:

class A {
  A(int x);
}

class B extends A {
  B(super.x, super.y);
}

해결 방법

슈퍼 생성자에 super 매개변수에 대응하는 위치 매개변수가 있어야 한다면, 슈퍼 생성자를 그에 맞게 수정하면 돼요:

class A {
  A(int x, int y);
}

class B extends A {
  B(super.x, super.y);
}

만약 슈퍼 생성자가 맞는 코드이거나 바꿀 수 없는 상황이라면, super 매개변수를 일반 매개변수로 바꾸면 돼요:

class A {
  A(int x);
}

class B extends A {
  B(super.x, int y);
}

더 알아보기