JavaでNoSuchMethodException
との正確な違いを見つけることができません。NoSuchMethodError
誰かがこれら2つのことの説明と例を挙げてもらえますか?
4 に答える
NoSuchMethodException は、リフレクションを通じてメソッドを呼び出すときにスローされる可能性があり、メソッドの名前はプログラム内の変数に由来します。
NoSuchMethodError は、コンパイルされた Java クラスが別のクラスに対して通常のメソッド呼び出しを行い、そのメソッドが存在しない場合にスローされる可能性があります。(これは通常、呼び出されているクラスの 1 つのバージョンに対して呼び出し側クラスがコンパイルされ、メソッドを持たないそのクラスの別のバージョンと一緒に実行されている場合に発生します。)
NoSuchMethodException
リフレクションを使用してメソッドを呼び出そうとすると発生します。
NoSuchMethodError
コンパイル中にそのメソッドがあったが、実行時にはそれがない場合に発生します。
次の例を考えてみましょうNoSuchMethodError
クラス : Person.java
public class Person{
public String getName(){
return "MyName";
}
}
を使用してコンパイルし、次を使用
javac Person.java
してこれを実行してみます
java Person
それはあなたを与えるでしょう
java.lang.NoSuchMethodError: main
Exception in thread "main"
public static void main(String [] args)
ないものを見つけようとするから
為にNoSuchMethodException
c = Class.forName("java.lang.String");
try
{
Class[] paramTypes = new Class[2];
Method m = c.getDeclaredMethod("myMethod", paramTypes);
}
これは例外をスローします
java.lang.NoSuchMethodException: java.lang.String.myMethod(null, null)
より良い説明があるこのリンクを検討してください
NoSuchMethodException
リフレクションで存在しないメソッドを取得しようとするとスローされます。Class#getDeclaredMethod(name, parameters)
たとえば、間違った名前またはパラメーターで呼び出します。
NoSuchMethodError
呼び出そうとしているメソッドが仮想マシンで見つからない場合にスローされます。これは、あるバージョンのライブラリでコンパイルし、後でクラスパス上の別のバージョンのライブラリ (たとえば、呼び出しているメソッドを持たない古いバージョン) でアプリケーションを実行した場合に発生する可能性があります。
特定のメソッドが見つからない場合にスローされます。
アプリケーションがクラス (静的またはインスタンス) の指定されたメソッドを呼び出そうとし、そのクラスにそのメソッドの定義がなくなった場合にスローされます。
こちらの記事も参照してください。