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 常见错误的主要内容,如果未能解决你的问题,请参考以下文章