static_access_to_instance_member 진단: 정적 접근으로 인스턴스 멤버에 접근할 때

static_access_to_instance_member 진단: 정적 접근으로 인스턴스 멤버에 접근할 때

Dart 분석기가 만들어 내는 static_access_to_instance_member 진단에 대한 설명이에요. 클래스 이름을 사용해서 인스턴스 필드에 접근하려고 하면, 분석기가 이 진단을 알려줘요. 인스턴스 필드는 클래스에 있는 게 아니라 클래스의 인스턴스(객체)에만 존재하기 때문이에요.

출처: 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;

더 알아보기