정의되지 않은 enum 생성자

정의되지 않은 enum 생성자

Dart 분석기가 내보내는 진단 중 하나인 undefined_enum_constructor를 살펴볼게요. enum 값을 초기화하기 위해 호출한 생성자가 enum에 정의되어 있지 않을 때 이 진단이 나타나요. 이름 없는 생성자를 호출했는데 막상 선언되지 않았거나, 이름 있는 생성자의 이름이 틀렸을 때가 흔한 원인이에요.

출처: undefined_enum_constructor

본문

이 진단은 다음과 같은 메시지로 나타나요.

  • 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 값 cx라는 이름의 생성자로 초기화되는데, 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();
}

더 알아보기