java.lang.IncompatibleClassChangeError:예외 원인 및 해결 방법

4638 단어

오류 시나리오 1


나는 프로젝트에서 이 오보의 실례를 만났다.이 오류는 일부 클래스 정의가 호환되지 않는 클래스 변경이 발생할 때 발생합니다. 현재 실행 방법에 의존하는 클래스 정의가 변경되었습니다.
public class B extends A{
}

public class A{
	//         
	public transient final Logger log = LoggerFactory.getLogger(getClass);
	//         
	public static final Logger log = LoggerFactory.getLogger(A.Class);
}

이런 상황에서 자바가 나타날 수도 있어요.lang.IncompatibleClassChangeError 예외getClass () 는 대상 실례의 방법으로 대상 실례만 이 방법이 있고 구체적인 클래스는 없습니다.클래스의 Class 클래스 인스턴스는 통과입니다.class가 얻은 것은 분명히 클래스가 없습니다.getClass () 방법입니다.가장 주요한 원인은:**Class.forName () 과 getClass () 는 실행할 때 불러옵니다.Class.class는 컴파일러가 불러옵니다. 즉.class는 정적 불러오기입니다.getClass()는 동적 로드입니다.**코드를 변경한 후에 자바 가상기는 컴파일 시기와 실행 시기에 얻은 대상이 같지 않다고 생각할 것이다.

오류 시나리오 2


1: 프로젝트에서 가져온jar 패키지 충돌;또는 같은jar백이 두 개의 다른 버전 번호에 의존합니다 2:jar백의 위치가 마벤트에서의 순서에 문제가 있어 의존을 찾을 수 없습니다
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-quartz</artifactId>
	<version>1.2.4</version>
</dependency>
<dependency>
	<groupId>org.shiro-scheduler</groupId>
	<artifactId>quartz</artifactId>
	<version>2.2.4</version>
</dependency>

좋은 웹페이지 즐겨찾기