static_access_to_instance_member 진단: 정적 접근으로 인스턴스 멤버에 접근할 때
static_access_to_instance_member 진단: 정적 접근으로 인스턴스 멤버에 접근할 때
Dart 분석기가 만들어 내는 static_access_to_instance_member 진단에 대한 설명이에요. 클래스 이름을 사용해서 인스턴스 필드에 접근하려고 하면, 분석기가 이 진단을 알려줘요. 인스턴스 필드는 클래스에 있는 게 아니라 클래스의 인스턴스(객체)에만 존재하기 때문이에요.
본문
진단 메시지는 다음과 같아요.
Instance member '{0}' can't be accessed using static access.
설명
분석기는 클래스 이름을 사용해서 인스턴스 필드에 접근할 때 이 진단을 만들어요. 인스턴스 필드는 클래스에 존재하지 않고, 클래스의 인스턴스에만 존재해요.
예시
다음 코드는 x가 인스턴스 필드이기 때문에 이 진단을 만들어요.
class C {
static int a = 0;
int b = 0;
}
int f() => C.b;
여기서 C.b처럼 클래스 이름으로 b에 접근하는데, b는 인스턴스 필드라서 이렇게는 접근할 수 없어요.
흔한 해결 방법
만약 정적 필드에 접근하려는 의도였다면, 필드 이름을 기존 정적 필드의 이름으로 바꿔요.
class C {
static int a = 0;
int b = 0;
}
int f() => C.a;
만약 인스턴스 필드에 접근하려는 의도였다면, 클래스의 인스턴스를 사용해서 필드에 접근해요.
class C {
static int a = 0;
int b = 0;
}
int f(C c) => c.b;