type_init_formals: 초기화 형식 매개변수에 불필요한 타입을 달지 말아요

type_init_formals: 초기화 형식 매개변수에 불필요한 타입을 달지 말아요

분석기가 내보내는 진단에는 이름이 있어요. type_init_formals는 **초기화 형식 매개변수(initializing formal parameter)**에 불필요한 타입 애너테이션을 붙였을 때 알려주는 진단이에요. 원문의 요지는 "초기화 형식 매개변수에 굳이 타입을 적지 마세요"라는 건데요, 왜 그런지 차근차근 살펴볼게요.

출처: type_init_formals

본문

설명

분석기는 초기화 형식 매개변수(this.x)나 슈퍼 매개변수(super.x)가 필드나 오버라이드된 매개변수와 같은 타입의 명시적 타입 애너테이션을 달고 있을 때 이 진단을 만들어요.

생성자 매개변수가 this.x로 필드를 초기화한다면, 그 매개변수의 타입은 암묵적으로 필드의 타입과 같아져요. 또 생성자 매개변수가 super.x로 슈퍼 생성자에 값을 전달한다면, 그 타입은 암묵적으로 슈퍼 생성자 매개변수의 타입과 같아져요. 타입이 어차피 같아질 텐데 그것을 또 적는 건 낭비일 뿐이죠.

예시

다음 코드는 매개변수 this.c가 필드 c와 같은 타입을 명시적으로 적고 있어서 이 진단을 만들어요.

class C {
  int c;

  C(int this.c);
}

다음 코드는 매개변수 super.a가 슈퍼클래스의 매개변수 a와 같은 타입을 명시적으로 적고 있어서 이 진단을 만들어요.

class A {
  A(int a);
}

class B extends A {
  B(int super.a);
}

흔한 해결 방법

매개변수에서 타입 애너테이션을 제거해요.

class C {
  int c;

  C(this.c);
}

더 알아보기