field_initializer_redirecting_constructor 진단: 리다이렉팅 생성자는 필드 초기화를 가질 수 없어요
field_initializer_redirecting_constructor 진단: 리다이렉팅 생성자는 필드 초기화를 가질 수 없어요
Dart 분석기가 내보내는 진단에는 이름이 있어요. field_initializer_redirecting_constructor는 리다이렉팅 생성자(redirecting constructor)가 객체의 필드를 초기화할 때 분석기가 알려주는 진단이에요. 리다이렉팅 생성자는 다른 생성자로 호출을 넘기기 때문에, 필드를 초기화하는 건 허용되지 않아요.
본문
설명
리다이렉팅 생성자가 객체 안의 필드를 초기화하면 이 진단이 나와요. 필드를 가진 인스턴스가 초기화되어야 할 시점에는 아직 만들어지지 않았기 때문에, 이렇게 초기화하는 건 허용되지 않아요.
예시
다음 코드는 생성자 C로 리다이렉트하는 생성자 C.zero가 필드 f를 초기화하는 초기화 형식 매개변수를 가져서 이 진단이 나와요.
class C {
int f;
C(this.f);
C.zero(this.f) : this(f);
}
다음 코드는 생성자 C로 리다이렉트하는 생성자 C.zero가 필드 f를 초기화하는 초기화를 가져서 이 진단이 나와요.
class C {
int f;
C(this.f);
C.zero() : f = 0, this(1);
}
흔한 해결 방법
초기화 형식 매개변수로 초기화하고 있었다면 일반 매개변수를 써요.
class C {
int f;
C(this.f);
C.zero(int f) : this(f);
}
초기화 리스트에서 초기화하고 있었다면 그 초기화를 빼요.
class C {
int f;
C(this.f);
C.zero() : this(0);
}