静的メソッドによって引き起こさjava.lang.NoSuchMethodErrorのエラー
あなたは今日、バグを修正すると、テストテストテストテスト結果に直接クラスファイルのうちばらつきがスローjava.lang.NoSuchMethodError
エラーを、このエラーは、プログラムを実行するときに、オブジェクトのメソッドが存在しない呼び出す、ということを示しています。私は、通常のローカル環境のコンパイラも、彼らは、それを調査ログを環境の操作を行い、エラーを特定できなかった理由を、実行していることができ、関連する2つのクラスファイルは、テスト環境から引き出され、逆コンパイル、問題がある原因静的メソッドので、質問。
説明を簡単にするためとリークを避けるために私はここでは2つのクラスのAとBを定義します
クラスA
public class A {
public void f2() {
System.out.println("invoke f2");
new B().f1();
}
}
クラスB
public class B {
public static void f1() {
System.out.println("invoke f1");
}
}
クラスBのF2 F1クラスメソッドと呼ばれる方法が、これは全く問題なかっただろうが、問題は、上記の静的メソッドに登場しています。最初はクラスBのF1メソッドは静的ではないので、クラスメソッドは、このコードをテスト環境にコンパイルされた後、新しいSVNを引っ張って、その後、私は、クラスを変更、最初のインスタンス化のF1 Bを呼び出す必要がありますコード、他者によるクラスB F1の方法の代わりに静的で、私はコードAの一部を変更して、テスト環境へのコンパイル済みのクラスファイルのコンパイル、テストするので、彼らはこのことを報告しましたエラー。
Exception in thread "main" java.lang.NoSuchMethodError: test.B.f1()V
at test.A.f2(A.java:6)
at test.App.main(App.java:5)
最も関連性の高い方法は、このような問題が実現した結果デコンパイルするまで、そこがどのように、何の問題のパラメータが存在しない、あると思うようになりました。
クラスデコンパイル結果
public class A { public void f2() { System.out.println("invoke f2");
new B();B.f1();
}
}
F2クラスがインスタンス化させる方法B方法BにF2が、呼B、使用F1または静的メソッドの呼び出し、および無関係例、静的メソッドおよび結合クラスを呼び出しています。