type_parameter_referenced_by_static: 정적 멤버는 클래스 타입 매개변수를 참조할 수 없어요
type_parameter_referenced_by_static: 정적 멤버는 클래스 타입 매개변수를 참조할 수 없어요
분석기가 내보내는 진단에는 이름이 있어요. type_parameter_referenced_by_static는 정적(static) 멤버가 클래스의 타입 매개변수를 참조할 때 알려주는 진단이에요. 원문의 요지는 "정적 멤버는 클래스의 타입 매개변수를 참조할 수 없다"는 거예요.
본문
설명
분석기는 정적 멤버가 클래스에 선언된 타입 매개변수를 참조할 때 이 진단을 만들어요. 타입 매개변수는 클래스의 인스턴스에 대해서만 의미가 있어요. 정적 멤버는 인스턴스 없이도 동작해야 하니까, 인스턴스별로 달라지는 타입 매개변수를 참조할 수 없는 거죠.
예시
다음 코드는 정적 메서드 hasType이 타입 매개변수 T를 참조하고 있어서 이 진단을 만들어요.
class C<T> {
static bool hasType(Object o) => o is T;
}
흔한 해결 방법
멤버가 인스턴스 멤버가 될 수 있다면, 키워드 static을 제거해요.
class C<T> {
bool hasType(Object o) => o is T;
}
멤버가 반드시 정적 멤버여야 한다면, 그 멤버를 제네릭으로 만들어요.
class C<T> {
static bool hasType<S>(Object o) => o is S;
}
다만 여기서 주의할 점이 있어요. T와 S 사이에는 아무 관계가 없기 때문에, 두 번째 방법은 처음 의도했던 의미와 달라질 수 있어요.