generative enum 생성자 참조 진단: enum 생성자는 enum 상수를 만들 때만 쓸 수 있어요

generative enum 생성자 참조 진단: enum 생성자는 enum 상수를 만들 때만 쓸 수 있어요

enum에 정의된 generative 생성자는 오직 enum 상수를 만들 때만 사용할 수 있고, 다른 용도로 쓰면 Dart 분석기가 invalid_reference_to_generative_enum_constructor 진단을 내보내요.

출처: invalid_reference_to_generative_enum_constructor

본문

설명

분석기는 enum에 정의된 generative 생성자가 enum 상수 중 하나를 만들 때가 아니라, 아니면 같은 enum 안의 다른 생성자에서 리다이렉션(redirection)의 대상으로 쓰일 때가 아닌 다른 곳에서 사용되면 이 진단을 만들어요. generative enum 생성자는 tear-off(떼어내기)할 수도 없어요.

예시

다음 코드는 E의 생성자가 함수 f 안에서 인스턴스를 만드는 데 사용되었기 때문에 이 진단을 만들어요.

enum E {
  a(0);

  const E(int x);
}

E f() => const E(2);

흔한 해결 방법

같은 값을 가진 enum 값이 이미 있거나 그런 상수를 추가한다면, 상수를 직접 참조해 주세요.

enum E {
  a(0),
  b(2);

  const E(int x);
}

E f() => E.b;

생성자 호출을 써야 한다면 factory 생성자를 사용해 주세요.

enum E {
  a(0);

  const E(int x);

  factory E.c(int x) => a;
}

E f() => E.c(2);

더 알아보기