field_initializer_redirecting_constructor 진단: 리다이렉팅 생성자는 필드 초기화를 가질 수 없어요

field_initializer_redirecting_constructor 진단: 리다이렉팅 생성자는 필드 초기화를 가질 수 없어요

Dart 분석기가 내보내는 진단에는 이름이 있어요. field_initializer_redirecting_constructor리다이렉팅 생성자(redirecting constructor)가 객체의 필드를 초기화할 때 분석기가 알려주는 진단이에요. 리다이렉팅 생성자는 다른 생성자로 호출을 넘기기 때문에, 필드를 초기화하는 건 허용되지 않아요.

출처: field_initializer_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);
}

더 알아보기