IncompatibleClassChangeError
来源:互联网 发布:ubuntu 14.04 卸载 编辑:程序博客网 时间:2024/05/22 03:25
IncompatibleClassChangeError
0x01. 规范
Java Language and Virtual Machine Specifications
The Java Language Specification, Java SE 9 Edition
The Java Virtual Machine Specification, Java SE 9 Edition
0x02. 堆栈
java.lang.IncompatibleClassChangeErrorCouldn't find xxxxxlibcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:659)libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:170)libcore.reflect.AnnotationAccess.getAnnotation(AnnotationAccess.java:72)java.lang.Class.getAnnotation(Class.java:343)
0x03. 查找java规范中异常的定义
该异常发生的时机:
12.3.3 Resolution of Symbolic References
可能引起该异常的错误:
- 0x01. IllegalAccessError
- 0x02. InstantiationError
- 0x03. NoSuchFieldError
- 0x04. NoSuchMethodError
从java规范上看UnsatisfiedLinkError也可能会导致这个问题.
0x04. 具体相关的信息
13.4.10 static Fields
eclared static , or vice versa, then a linkage error, specifically an
IncompatibleClassChangeError , will result if the field is used by a pre-existing
binary which expected a field of the other kind. Such changes are not recommended
in code that has been widely distributed.13.4.19 static Methods
If a method that is not declared private is also declared static (that is, a class
method) and is changed to not be declared static (that is, to an instance method),
or vice versa, then compatibility with pre-existing binaries may be broken, resulting
in a linkage time error, namely an IncompatibleClassChangeError , if these
methods are used by the pre-existing binaries. Such changes are not recommended
in code that has been widely distributed.13.5.5 Field Declarations
13.5.6 Interface Method Declarations
接口中方法的增加或者删除,也会导致这个异常.
0x05. 分析
实际上我们自己的代码完全不存在java规范上提到的那几个场景,发生异常的地方是一个私有成员也就是规范中说的Feild. 这个成员是几百年都不会变动的,因此不存在上面提到的问题.
那么既然如此,也不可能凭空出来一个IncompatibleClassChangeError! 但是这个问题也仅仅在金融App中报出,金融App试用了360的插件框架,因此怀疑和插件框架相关.
思路:
捕获这个异常,然后把异常时候的classloader打印出来,并且上传埋点.
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- java.lang.IncompatibleClassChangeError翻译
- java.lang.IncompatibleClassChangeError
- java.lang.IncompatibleClassChangeError
- Java编译(IncompatibleClasschangeError)
- java.lang.IncompatibleClassChangeError
- java.lang.IncompatibleClassChangeError
- java.lang.IncompatibleClassChangeError
- 解决java.lang.IncompatibleClassChangeError
- java.lang.IncompatibleClassChangeError
- java.lang.IncompatibleClassChangeError: BasicHttpParams
- 解决java.lang.IncompatibleClassChangeError
- 解决java.lang.IncompatibleClassChangeError
- 解决java.lang.IncompatibleClassChangeError
- [DP]51 Nod——[1048 整数分解为2的幂 V2]
- Mybatis学习(14)-MyBatis的逆向工程生成代码
- Jzoj4776 排序
- Google 面试题:数组补丁
- 小朋友学C语言(29):switch case语句
- IncompatibleClassChangeError
- 小朋友学C语言(30):局部变量和全局变量
- Ubuntu下添加nodejs环境变量+ yo 不是有效的命令(yeoman)
- $ git push -u origin master ssh_exchange_identification: read: Software caused ....
- latex 模板下载开源网址
- 剑指offer 38 数字在排序数组中出现的次数
- 购物车价格计算工具类
- php 小菜鸟准备写博客了
- 2017.10.24 測試總結并今日總結