java.lang.NoSuchMethodError: com.xxx.xxx.xxx.IMethodA(Lcom/xxx/xxx/xxx/xxx/xxx/classA;)Z
代码在本地没问题,但是打成jar包下发上线运行就报这个错。
原因是修改了一个接口方法的入参类型或返回类型后,所有用到这个接口的类的都需要重新编译。比如我标题里的methodA,他原本返回类型是boolean型,但现在我把他改为Boolean型,那么如果我在ClassB中用到了methodA,就需要重新编译ClassB。
顺带附上这个方法报错里各种字母的解释
标志符 | 类型 |
---|---|
B | 基本数据类型byte |
C | 基本数据类型byte |
D | 基本数据类型byte |
F | 基本数据类型byte |
I | 基本数据类型byte |
J | 基本数据类型byte |
S | 基本数据类型byte |
Z | 基本数据类型byte |
V | 基本数据类型byte |
L | 对象类型,如Ljava/lang/Object,Ljava/lang/Boolean |
更详细的内容可参见从一个class文件深入理解Java字节码结构
这篇文章的4.3.2节,