NoSuchFieldError — 존재하지 않는 필드에 접근하려 할 때

NoSuchFieldError — 존재하지 않는 필드에 접근하려 할 때

NoSuchFieldError는 애플리케이션이 객체의 특정 필드에 접근하거나 수정하려 했는데, 그 객체에 더 이상 그 필드가 없을 때 던져지는 에러예요.

출처: Java API Reference

본문

평소에는 컴파일러가 존재하지 않는 필드 접근을 막아 주므로, 이 에러는 클래스 정의가 비호환적으로 바뀌어 런타임에서야 드러나는 경우가 많아요. 예를 들어 어떤 클래스의 필드가 라이브러리 업데이트에서 제거됐는데, 옛 바이너리가 그 필드를 여전히 참조하는 식이에요.

상속 구조는 다음과 같아요.

java.lang.Object
  java.lang.Throwable
    java.lang.Error
      java.lang.LinkageError
        java.lang.IncompatibleClassChangeError
          java.lang.NoSuchFieldError

NoSuchFieldError는 링크 에러 계열의 하나로, 리플렉션에서 필드를 못 찾을 때 나오는 NoSuchFieldException(checked exception)과는 성격이 달라요.

생성자

  • NoSuchFieldError() — 상세 메시지 없이 생성해요.
  • NoSuchFieldError(String s) — 지정된 상세 메시지로 생성해요.

더 알아보기 (Learn more)