2

重複の可能性:
リフレクション (Java) を使用してプライベートな静的メソッドを呼び出すにはどうすればよいですか?

そのため、特定のクラスのインスタンスを返すだけの「getInstance」の行に沿って何かという名前のメソッドがあります。引数のない静的メソッドです。

そのメソッドを呼び出して、クラスの戻り値 (インスタンス) を取得するにはどうすればよいでしょうか? 私が使用しようとするすべてのメソッドは、見た目の引数にクラスのインスタンスを持っている必要があります。

たとえば、私は使用しようとします

Method method = classLoader.loadClass("testClass").getMethod("getInstance", null);
            Object object = method.invoke(null, null);

しかし、私は常にこの行でヌルポインタ例外を受け取ります.

Object object = method.invoke(null, null);

要求するオブジェクトがnullであるため、これを取得すると想定しています。

助けてくれてありがとう。

編集: メソッドは null ではありません。私はやっていますが、System.out.println(method == null);falseが出力されます。

4

5 に答える 5

4

null引数またはパラメーター リストとしては必要ありません。代わりにできること

Method method = classLoader.loadClass("testClass").getMethod("getInstance", new Class[0]);
Object object = method.invoke(null, new Object[0]);

または、varargs メソッドであるため、次のようになります。

Method method = classLoader.loadClass("testClass").getMethod("getInstance");
Object object = method.invoke(null);
// or works but is perhaps confusing.
Object object = method.invoke(null, null);
于 2012-09-11T10:56:34.967 に答える
1

私にとって、次の 2 つのコードは両方とも静的メソッドに対して正しく機能し、戻り値を出力します。

Method method = myClass.getMethod("getInstance", null);
Object object = method.invoke(null);
System.out.println("returned value: "+object);

としても

Method method = myClass.getMethod("getInstance", null);
Object object = method.invoke(null,null);
System.out.println("returned value: "+object);

使用しているJavaのバージョンに依存すると思います(1.5より前のvarargsはありません)。Java ランタイム v1.6 を使用しています。

于 2012-09-11T11:04:42.530 に答える
0

それは問題ではありません。 基になるメソッドが静的である場合、指定された obj 引数は無視されます。null の場合があります。

したがって、メソッド自体はnullでなければならないようです。

于 2012-09-11T10:48:45.360 に答える
0

問題はあなたのgetInstance方法にあると思います。デバッグまたは投稿できますか。

于 2012-09-11T10:56:36.033 に答える
-1

あなたgetMethod("getInstance", null)は「名前が 'getInstance' でパラメーターのないメソッドを取得する」と言っています。

入力method.invoke(null, null)すると、「オブジェクト 'null' でこのメソッドを呼び出し、最初のパラメーターとして 'null' を渡します」と表示されます。

最後を削除して、次のnullように入力する必要があります。

Object object = method.invoke(null);
于 2012-09-11T10:58:19.193 に答える