존재하지 않는 필드를 초기화할 때

존재하지 않는 필드를 초기화할 때 (initializer_for_non_existent_field)

생성자에서 어떤 필드를 초기화하려고 하는데, 막상 그 필드가 클래스에 선언돼 있지 않으면 문제가 생기겠죠. 이 진단은 생성자가 존재하지 않는 필드를 초기화할 때 분석기가 알려주는 진단이에요.

출처: initializer_for_non_existent_field

본문

설명

분석기는 생성자가 있는 클래스에 선언되지 않은 필드를 초기화할 때 이 진단을 만들어요. 생성자는 선언되지 않은 필드나, 슈퍼클래스에서 상속받은 필드는 초기화할 수 없어요.

예시

아래 코드는 초기화 리스트가 x를 초기화하고 있는데, x는 클래스에 없는 필드이기 때문에 이 진단이 나와요.

class C {
  int? y;

  C() : x = 0;
}

흔한 해결 방법

상황에 따라 두 가지로 나뉘어요.

먼저, 다른 필드를 초기화하려는 의도였다면 필드 이름을 맞춰 주면 돼요.

class C {
  int? y;

  C() : y = 0;
}

필드가 애초에 선언돼야 하는 상황이라면, 선언을 추가해 주면 돼요.

class C {
  int? x;
  int? y;

  C() : x = 0;
}

더 알아보기