Maison  >  Article  >  Java  >  Comment utiliser la méthode Invoke en Java ?

Comment utiliser la méthode Invoke en Java ?

WBOY
WBOYavant
2023-04-25 14:55:071529parcourir

Tout d'abord, vous devez comprendre ce que fait la méthode d'invocation et son utilisation spécifique. En fait, vous devez savoir de quel fichier de classe il s'agit dans le code source et dans quel package il se trouve, et retracer la source.

La méthode d'invocation provient de la classe Method et peut ne pas être utilisée autant que les classes wrapper de type de base que nous utilisons souvent, ainsi que les classes de collection et leurs extensions et classes utilitaires.

Mais le package où se trouve la classe Method est la fameuse réflexion Reflact. S'il n'y a rien qui dit que Java n'a pas de réflexion, alors de nombreux frameworks n'existeront pas.

Nous créons souvent de nouveaux objets, mais le principe de new est que vous savez de quel objet vous avez besoin avant de pouvoir en créer de nouveaux. Cependant, il existe des inconnues dans le code et dans la vie réelle, c'est-à-dire que vous ne savez pas de quelle classe il s'agit. c'est jusqu'à ce qu'il soit limité par les conditions d'exécution du programme, quelle méthode.

Reflection résout ce problème en obtenant la structure de l'objet et en appelant des méthodes au moment de l'exécution.
La classe Method concerne les méthodes d'appel réfléchies
L'image ci-dessous est l'annotation officielle de la classe Method

Comment utiliser la méthode Invoke en Java ?

Cela signifie probablement qu'en fournissant les informations sur la méthode de la classe ou de l'interface, vous pouvez accéder et appeler la méthode correspondante.

Invoke signifie appeler, ce qui signifie que nous pouvons appeler la méthode Invoke via la classe Method sous le package de réflexion, appeler la méthode que nous fournissons et les paramètres de la méthode appelante pour terminer l'appel dynamique.

Autrement dit, il est appelé en fonction de l'objet/instance, du nom de la méthode et des paramètres que vous donnez. Trouvez un « substitut » pour vous aider à appeler la méthode.

2 L'utilisation de la méthode d'invocation
En fait, l'utilisation de la méthode d'invocation est différente de ce que nous voyons couramment.

Nous créons souvent un objet A, la méthode getA() dans l'objet A, puis A.getA()

Nous utilisons une nouvelle façon d'appeler
(1) Faire un "substitut" à la méthode (en fait, construisez un objet méthode, laissez cet objet méthode remplacer la méthode que vous souhaitez utiliser maintenant)
(2) Donnez ensuite à l'avatar les objets et les paramètres dont il a besoin, et laissez l'avatar l'appeler pour vous (comme l'avatar de JOJO se bat pour vous)

La démonstration de code spécifique est la suivante :

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);
    }

Donc, l'utilisation de la méthode d'invocation nécessite une étape de plus que les autres méthodes, qui consiste à construire un objet Method. Cet objet remplace la méthode que le programme appelle actuellement.

Et en plus des paramètres, l'invocation nécessitera également un objet supplémentaire, car les appels de méthode nécessitent des objets, donc si la méthode cible qui invoque veut appeler, elle a besoin des objets requis de la méthode cible.

Il semble que la méthode d'invocation soit non seulement plus gênante que d'appeler directement la méthode ordinaire, mais y avez-vous déjà pensé, j'ai seulement besoin de saisir des paramètres, je peux appeler diverses méthodes alternatives et, dans des situations inconnues, décider quel objet pour appeler en fonction des conditions, quelle méthode peut soudainement rendre le code flexible ? Ce n'est pas seulement la beauté de l'invocation, mais aussi la beauté de la réflexion dans son ensemble. Elle peut être utilisée de manière flexible en fonction des conditions d'exécution du programme. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer