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