generative enum 생성자 참조 진단: enum 생성자는 enum 상수를 만들 때만 쓸 수 있어요
generative enum 생성자 참조 진단: enum 생성자는 enum 상수를 만들 때만 쓸 수 있어요
enum에 정의된 generative 생성자는 오직 enum 상수를 만들 때만 사용할 수 있고, 다른 용도로 쓰면 Dart 분석기가 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);