세터가 없는 final 필드에 값 할당

세터가 없는 final 필드에 값 할당 (assignment_to_final_no_setter)

이 문서는 Dart 분석기(analyzer)가 만들어 내는 assignment_to_final_no_setter 진단(diagnostic)에 대한 상세한 내용을 설명하는 문서예요. 세터에 대한 참조를 발견했는데 해당 타입에는 세터가 없고, 대신 같은 이름의 getter만 정의되어 있을 때 분석기가 이 진단을 알려 줘요. 어떤 상황에서 발생하고 어떻게 고치는지 함께 알아볼게요.

출처: assignment_to_final_no_setter

본문

진단 메시지

There isn't a setter named '{0}' in class '{1}'.

클래스 '{1}'에 '{0}'이라는 이름의 세터(setter)가 없어요.

설명

분석기는 세터에 대한 참조를 발견했는데, 해당 타입에 정의된 세터가 없고 같은 이름의 getter만 정의되어 있을 때 이 진단을 만들어 내요. getter만 있는 멤버에는 값을 할당할 수 없으니까요.

예시

다음 코드는 Cx라는 이름의 세터는 없고 getter만 있기 때문에 이 진단을 만들어 내요.

class C {
  int get x => 0;
  set y(int p) {}
}

void f(C c) {
  c.x = 1;
}

일반적인 해결 방법

기존에 있는 세터를 호출하고 싶다면, 이름을 올바르게 고쳐 주세요.

class C {
  int get x => 0;
  set y(int p) {}
}

void f(C c) {
  c.y = 1;
}

세터를 호출하고 싶은데 아직 없을 뿐이라면, 세터를 선언해 주세요.

class C {
  int get x => 0;
  set x(int p) {}
  set y(int p) {}
}

void f(C c) {
  c.x = 1;
}

더 알아보기