extension_override_without_access 진단: 확장 오버라이드는 인스턴스 멤버 접근에만 쓸 수 있어요

extension_override_without_access 진단: 확장 오버라이드는 인스턴스 멤버 접근에만 쓸 수 있어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. extension_override_without_access확장 오버라이드(extension override)가 확장의 멤버에 접근하는 데 사용되지 않을 때 분석기가 알려주는 컴파일 타임 진단이에요. 확장 오버라이드는 멤버를 선택하는 데만 쓰고, 그 자체로 값이 있는 표현식은 아니에요.

출처: extension_override_without_access

본문

설명

분석기는 확장의 멤버에 접근하는 데 사용되지 않는 확장 오버라이드를 발견하면 이 진단을 내보내요. 확장 오버라이드 구문에는 런타임 시맨틱(runtime semantics)이 없어요. 컴파일 타임에 어떤 멤버를 선택할지만 정해 줄 뿐이에요.

예시

다음 코드는 E(i)이 표현식이 아니기 때문에 이 진단이 나와요.

extension E on int {
  int get a => 0;
}
void f(int i) {
  print(E(i));
}

흔한 해결 방법

확장의 멤버 중 하나를 호출하고 싶다면, 호출을 추가해요.

extension E on int {
  int get a => 0;
}
void f(int i) {
  print(E(i).a);
}

멤버를 호출하고 싶지 않다면, 인자를 풀어서 올바른 값을 그대로 써요.

extension E on int {
  int get a => 0;
}
void f(int i) {
  print(i);
}

더 알아보기