私は共通の瓶に次のクラスを持っています:
public class Common
{
public Common(List list)
{
...
}
}
次に、次のようにコンストラクターのパラメーターを a から a に変更List
し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
}
トムが言ったように、13 行目でわかるように、正確なコンストラクターはコンパイル時にバインドされます。
あなたは毎日何か新しいことを学びます:-)