まず第一に、invoke メソッドが何をするのか、そしてその具体的な用途を理解する必要があります。実際には、それがソース コード内のどのクラス ファイルに含まれているのか、どのパッケージに含まれているのかを見つけて、ソースをトレースする必要があります。
invoke メソッドは Method クラスから来ており、私たちがよく使う基本的な型ラッパー クラスや、コレクション クラスとその拡張機能、ツール クラスほどは使用されない場合があります。
しかし、Method クラスが配置されているパッケージは有名なリフレクション Reflex であり、Java にリフレクションがないということがなければ、多くのフレームワークは存在しないことになります。
私たちは新しいオブジェクトを作成することがよくありますが、新しいオブジェクトを作成する前に、必要なオブジェクトがわかっていることが前提となります。ただし、コードと現実の両方、つまりプログラムが完成するまでは未知の部分があります。実行時には条件が影響するため、初めてどのクラスとどのメソッドがわかるかがわかります。
リフレクションは、オブジェクト構造を取得し、実行時にメソッドを呼び出すことで、この問題を解決します。
Method クラスはメソッドの反射呼び出しに関するものです。
次の図は Method クラスの公式のアノテーションです。
これはおそらく、クラスのメソッド情報を提供することを意味します。インターフェースにアクセスし、対応するメソッドを呼び出すことができます。
Invoke は呼び出すことを意味し、リフレクション パッケージの Method クラスを通じて invoke メソッドを呼び出し、提供するメソッドと呼び出しメソッドのパラメータを呼び出して動的呼び出しを完了できることを意味します。
つまり、指定したオブジェクト/インスタンス、メソッド名、パラメーターに基づいて呼び出されます。メソッドの呼び出しに役立つ「代替」を見つけます。
2 invoke メソッドの使用法
実際、invoke メソッドの使用法は、私たちがよく目にするものとは異なります。
オブジェクト A、A オブジェクト内のメソッド getA()、そして A.getA()を作成することがよくあります。
新しい方法を使用して
(1) Get を呼び出します。メソッド「スタンドイン」 (実際には、メソッド オブジェクトを構築し、現在使用するメソッドをこのメソッド オブジェクトに置き換えることです)
(2) 次に、スタンドインに必要なオブジェクトとパラメータを与えます。そして、代役にそれを呼び出してもらいます (JOJO の A 代役があなたのために戦ってくれるように)
具体的なコードのデモは次のとおりです:
public class InvokeTest { public void test(String[] arg){ for (String string : arg) { System.out.println("zp is " + string); } } @Test public void invokeDemo() throws Exception { //获取字节码对象,这里要填好你对应对象的包的路径 Class<InvokeTest> clazz = (Class<InvokeTest>) Class.forName("com.example.zp.demo.testDemo.InvokeTest"); //形式一:获取一个对象 // Constructor con = clazz.getConstructor(); // InvokeTest m = (InvokeTest) con.newInstance(); //形式二:直接new对象,实际上不是框架的话,自己写代码直接指定某个对象创建并调用也可以 InvokeTest m = new InvokeTest(); String[] s = new String[]{"handsome","smart"}; //获取Method对象 Method method = clazz.getMethod("test", String[].class); //调用invoke方法来调用 method.invoke(m, (Object) s); }
したがって、invoke メソッドを使用するには、もう 1 つの手順が必要です。他のメソッドとは異なり、Method オブジェクトを構築します。このオブジェクトは現在のプログラムを置き換えます。呼び出されるメソッドの置き換えです。
メソッド呼び出しにはオブジェクトが必要なため、パラメーターに加えて、呼び出しにはもう 1 つのオブジェクトも必要になります。そのため、呼び出すターゲット メソッドが呼び出す場合は、ターゲット メソッドの必要なオブジェクトが必要になります。
invoke メソッドは、通常のメソッドを直接呼び出すよりも面倒なだけではなく、パラメーターを入力するだけで、さまざまな代替メソッドを呼び出すことができ、未知の状況でも、それについて考えたことはありますか?条件によって決まる どのオブジェクトやメソッドをいきなり呼び出すかでコードが柔軟になる これはinvokeの美しさだけでなくリフレクション全体の美しさでもあり プログラム実行時に条件に応じて柔軟に使えるランニング。
以上がJava で invoke メソッドを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。