我在一个普通的 jar 中有以下类:
public class Common
{
public Common(List list)
{
...
}
}
然后我将构造函数参数从 a 更改List
为 a Collection
,如下所示:
public class Common
{
public Common(Collection collection)
{
...
}
}
重建公共 jar 并运行系统NoSuchMethodError
在调用构造函数时会在任何依赖类中导致 a,直到我重新编译该类。
我有一些想法是什么导致了这种情况,就像构造函数如何绑定在依赖类的字节码中一样,但我不是 100% 确定。
请问有人可以解释一下这里发生了什么吗?
更新
我随后做了一个快速测试并查看了字节码:
Compiled from "Client.java"
public class Client extends java.lang.Object{
public Client();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: new #2; //class ArrayList
3: dup
4: invokespecial #3; //Method java/util/ArrayList."<init>":()V
7: astore_1
8: new #4; //class Common
11: dup
12: aload_1
13: invokespecial #5; //Method Common."<init>":(Ljava/util/List;)V
16: pop
17: return
}
正如 Tom 所说,正如您在第 13 行所见,确切的构造函数是在编译时绑定的。
你每天学习新的东西 :-)