ホームページ  >  記事  >  Java  >  Java で invoke メソッドを使用するにはどうすればよいですか?

Java で invoke メソッドを使用するにはどうすればよいですか?

WBOY
WBOY転載
2023-04-25 14:55:071529ブラウズ

まず第一に、invoke メソッドが何をするのか、そしてその具体的な用途を理解する必要があります。実際には、それがソース コード内のどのクラス ファイルに含まれているのか、どのパッケージに含まれているのかを見つけて、ソースをトレースする必要があります。

invoke メソッドは Method クラスから来ており、私たちがよく使う基本的な型ラッパー クラスや、コレクション クラスとその拡張機能、ツール クラスほどは使用されない場合があります。

しかし、Method クラスが配置されているパッケージは有名なリフレクション Reflex であり、Java にリフレクションがないということがなければ、多くのフレームワークは存在しないことになります。

私たちは新しいオブジェクトを作成することがよくありますが、新しいオブジェクトを作成する前に、必要なオブジェクトがわかっていることが前提となります。ただし、コードと現実の両方、つまりプログラムが完成するまでは未知の部分があります。実行時には条件が影響するため、初めてどのクラスとどのメソッドがわかるかがわかります。

リフレクションは、オブジェクト構造を取得し、実行時にメソッドを呼び出すことで、この問題を解決します。
Method クラスはメソッドの反射呼び出しに関するものです。
次の図は Method クラスの公式のアノテーションです。

Java で invoke メソッドを使用するにはどうすればよいですか?

これはおそらく、クラスのメソッド情報を提供することを意味します。インターフェースにアクセスし、対応するメソッドを呼び出すことができます。

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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。