IncompatibleClassChangeError — 클래스 정의가 비호환적으로 바뀌었을 때
IncompatibleClassChangeError — 클래스 정의가 비호환적으로 바뀌었을 때
IncompatibleClassChangeError는 어떤 클래스 정의에 호환되지 않는 변경이 발생했을 때 던져지는 에러예요. 현재 실행 중인 메서드가 의존하던 클래스의 정의가 그 이후에 바뀌어 버린 상황을 나타내요.
본문
이 에러는 클래스를 어떻게 사용할지와 실제 정의가 어긋날 때 생겨요. 예를 들어 상속 관계에서 인스턴스 메서드였던 게 static으로 바뀌었다거나, 추상 메서드의 구현 여부가 달라졌다거나 하는 식의 바이너리 호환성(binary compatibility) 문제가 대표적이에요. 보통 컴파일러가 잡아 주므로, 런타임에서 만난다면 라이브러리 버전 간 비호환을 의심해 봐야 해요.
상속 구조는 다음과 같아요.
java.lang.Object
java.lang.Throwable
java.lang.Error
java.lang.LinkageError
java.lang.IncompatibleClassChangeError
대표적인 하위 클래스로 AbstractMethodError, IllegalAccessError, InstantiationError, NoSuchFieldError, NoSuchMethodError가 있어요.
생성자
IncompatibleClassChangeError()— 상세 메시지 없이 생성해요.IncompatibleClassChangeError(String s)— 지정된 상세 메시지로 생성해요.