존재하지 않는 필드를 가리키는 초기화 형식 파라미터
존재하지 않는 필드를 가리키는 초기화 형식 파라미터 (initializing_formal_for_non_existent_field)
this.x처럼 쓰는 초기화 형식 파라미터(initializing formal)는 선언한 필드에 값을 넣어 주는 문법이에요. 그런데 그 필드가 클래스에 없으면 당연히 문제가 되겠죠. 이 진단은 존재하지 않는 필드를 가리키는 초기화 형식 파라미터가 있을 때 분석기가 알려주는 진단이에요.
본문
설명
분석기는 초기화하는 필드를 클래스가 선언하지 않았는데도 초기화 형식 파라미터가 생성자에 있을 때 이 진단을 만들어요. 생성자는 선언되지 않은 필드나, 슈퍼클래스에서 상속받은 필드는 초기화할 수 없어요.
예시
아래 코드는 필드 x가 정의돼 있지 않기 때문에 이 진단이 나와요.
class C {
int? y;
C(this.x);
}
흔한 해결 방법
상황에 따라 네 가지로 나뉘어요.
필드 이름이 잘못됐다면, 존재하는 필드의 이름으로 바꿔 주면 돼요.
class C {
int? y;
C(this.y);
}
필드 이름이 맞는데 아직 정의가 안 됐다면, 필드를 선언해 주면 돼요.
class C {
int? x;
int? y;
C(this.x);
}
파라미터가 필요하지만 필드를 초기화할 의도가 아니라면, 일반 파라미터로 바꿔서 사용하면 돼요.
class C {
int y;
C(int x) : y = x * 2;
}
파라미터가 필요 없다면, 그냥 제거하면 돼요.
class C {
int? y;
C();
}