정의되지 않은 enum 생성자
정의되지 않은 enum 생성자
Dart 분석기가 내보내는 진단 중 하나인 undefined_enum_constructor를 살펴볼게요. enum 값을 초기화하기 위해 호출한 생성자가 enum에 정의되어 있지 않을 때 이 진단이 나타나요. 이름 없는 생성자를 호출했는데 막상 선언되지 않았거나, 이름 있는 생성자의 이름이 틀렸을 때가 흔한 원인이에요.
본문
이 진단은 다음과 같은 메시지로 나타나요.
- The enum doesn't have a constructor named '{0}'. (enum에는 '{0}'이라는 이름의 생성자가 없어요.)
- The enum doesn't have an unnamed constructor. (enum에는 이름 없는 생성자가 없어요.)
설명
분석기는 enum 값을 초기화하기 위해 호출된 생성자가 존재하지 않을 때 이 진단을 내보내요.
예시
아래 코드는 enum 값 c가 이름 없는 생성자로 초기화되는데, E에는 이름 없는 생성자가 정의되어 있지 않기 때문에 이 진단이 발생해요.
enum E {
c();
const E.x();
}
아래 코드는 enum 값 c가 x라는 이름의 생성자로 초기화되는데, E에는 x라는 이름의 생성자가 정의되어 있지 않기 때문에 이 진단이 발생해요.
enum E {
c.x();
const E.y();
}
자주 쓰는 해결 방법
enum 값이 이름 없는 생성자로 초기화되고 있는데 이름 있는 생성자 중 하나를 써야 한다면, 생성자의 이름을 추가해요.
enum E {
c.x();
const E.x();
}
enum 값이 이름 없는 생성자로 초기화되고 있는데 어느 이름 있는 생성자도 적절하지 않다면, 이름 없는 생성자를 정의해요.
enum E {
c();
const E();
}
enum 값이 이름 있는 생성자로 초기화되고 있는데 기존 생성자 중 하나를 써야 한다면, 호출되는 생성자의 이름을 바꿔요 (이름 없는 생성자를 써야 한다면 이름을 제거해요).
enum E {
c.y();
const E();
const E.y();
}
enum 값이 이름 있는 생성자로 초기화되고 있는데 기존 생성자 중 어느 것도 쓸 수 없다면, 사용된 이름으로 생성자를 정의해요.
enum E {
c.x();
const E.x();
}