positional_super_formal_parameter_with_positional_argument 진단: 위치 기반 super 매개변수와 위치 인자를 함께 못 써요

positional_super_formal_parameter_with_positional_argument 진단: 위치 기반 super 매개변수와 위치 인자를 함께 못 써요

Dart 분석기가 내보내는 진단에는 이름이 있어요. positional_super_formal_parameter_with_positional_argumentsuper 생성자 호출에 위치 인자(positional argument)가 있을 때 위치 기반 super 매개변수를 쓸 수 없다는 진단이에요. 두 가지를 같이 쓰면 같은 매개변수에 값이 두 개 붙어서 문제가 돼요.

출처: positional_super_formal_parameter_with_positional_argument

본문

설명

분석기는 슈퍼클래스 생성자에 전달되는 위치 기반 매개변수 중 일부만 super 매개변수를 사용할 때 이 진단을 만들어요.

위치 기반 super 매개변수는 인덱스로 super 생성자의 위치 기반 매개변수와 연결돼요. 즉 첫 번째 super 매개변수는 super 생성자의 첫 번째 위치 기반 매개변수와 연결되고, 두 번째는 두 번째와, 이런 식으로 이어져요. 위치 인자(positional argument)도 마찬가지예요. 위치 기반 super 매개변수와 위치 인자를 둘 다 쓰면 슈퍼클래스 생성자의 같은 매개변수에 값이 두 개 붙게 되므로, 허용되지 않아요.

예시

다음 코드는 B.new 생성자가 super 매개변수를 사용해 A의 super 생성자에 필요한 위치 기반 매개변수 중 하나를 넘기면서, 나머지 하나는 super 생성자 호출에서 명시적으로 전달하고 있기 때문에 이 진단을 만들어요.

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

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

흔한 해결 방법

모든 위치 기반 매개변수를 super 매개변수로 쓸 수 있다면, 일반 위치 기반 매개변수를 super 매개변수로 바꿔 주세요.

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

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

일부 위치 기반 매개변수는 super 매개변수로 쓸 수 없다면, super 매개변수를 일반 매개변수로 바꿔 주세요.

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

class B extends A {
  B(int x, int y) : super(x + 1, y);
}

더 알아보기