java.lang.IncompatibleClassChangeError 常见错误
Posted master-dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.IncompatibleClassChangeError 常见错误相关的知识,希望对你有一定的参考价值。
最近开发中遇到类冲突报错 java.lang.IncompatibleClassChangeError,遂了解并复现一些case
java.lang.IncompatibleClassChangeError 解释
错误解释
package java.lang;
/**
* Thrown when an incompatible class change has occurred to some class
* definition. The definition of some class, on which the currently
* executing method depends, has since changed.
*
* @author unascribed
* @since JDK1.0
*/
public
class IncompatibleClassChangeError extends LinkageError
private static final long serialVersionUID = -4914975503642802119L;
即在执行过程中,有些类的定义发生了改变。即某个.class文件不是期望的那样,它被改变了。
对该类的扩展解释:http://jszx-jxpt.cuit.edu.cn/javaapi/java/lang/IncompatibleClassChangeError.html,平时看到的NoSuchFieldError
, NoSuchMethodError
等都属于这种错误
IncompatibleClassChangeError 错误复现
public class Base
public int val = 1;
public void run()
System.out.println("base run");
public class Fa extends Base
@Override
public void run()
System.out.println("fa go");
public class Main
public static void main(String[] args)
Base base = new Fa();
System.out.println(base.val);
base.run();
修改Base.java文件(如下,将val变成static),重新生成.class
public static int val = 1;
然后再次执行就能出现java.lang.IncompatibleClassChangeError
报错
java.lang.IllegalAccessError
再比如: 基类成员从过年public变成private, 父类无法访问报错java.lang.IllegalAccessError
java.lang.NoSuchMethodError
基类某个方法没有了(比如jar升级),然后编译,运行时执行报错java.lang.NoSuchMethodError
以上是关于java.lang.IncompatibleClassChangeError 常见错误的主要内容,如果未能解决你的问题,请参考以下文章