Comment passer une fonction en paramètre en Java

Hassan Saeed 12 octobre 2023
  1. Utiliser une instance d’une interface pour passer une fonction en paramètre en Java
  2. Utilisez la méthode java.lang.reflect.Method pour passer une fonction en paramètre en Java
Comment passer une fonction en paramètre en Java

Ce tutoriel explique comment passer une fonction en paramètre à une autre fonction de Java.

Nous discuterons de deux méthodes différentes pour passer une fonction en paramètre dans Java.

Utiliser une instance d’une interface pour passer une fonction en paramètre en Java

Dans cette méthode, vous devez écrire la fonction que vous devez passer en paramètre dans une classe implémentant une interface contenant uniquement le squelette de cette méthode.

L’exemple ci-dessous en est une illustration.

Nous définissons une interface Callable qui contient le squelette de la fonction que nous prévoyons de passer en paramètre. Ensuite, nous définissons une classe qui implémente Callable et inclut la définition complète de la fonction. Cette fonction peut être passée à une autre fonction comme newFunction(Callable callable, int param)callable représente une instance de l’interface Callable.

Un exemple de fonctionnement complet est présenté dans le code ci-dessous.

interface Callable {
  public void call(int param);
}

class Test implements Callable {
  public void call(int param) {
    System.out.println(param);
  }
}

public class HelloWorld {
  public static void invoke(Callable callable, int param) {
    callable.call(param);
  }
  public static void main(String[] args) {
    Callable cmd = new Test();
    invoke(cmd, 10);
  }
}

Production:

> 10

Utilisez la méthode java.lang.reflect.Method pour passer une fonction en paramètre en Java

Nous avons une fonction functionToPass que nous devons passer en paramètre à la fonction outFunction.

Il n’y a pas de différence dans la définition de la fonction functionToPass; cependant, nous devons suivre une syntaxe spécifique pour définir la fonction outFunction : outFunction(Object object, Method method, param1, param2, ...).

Regardez l’exemple ci-dessous:

import java.lang.reflect.Method;

public class Main {
  public void functionToPass(String message) {
    String[] split = message.split(" ");
    for (int i = 0; i < split.length; i++) System.out.println(split[i]);
  }

  public void outerFunction(Object object, Method method, String message) throws Exception {
    Object[] parameters = new Object[1];
    parameters[0] = message;
    method.invoke(object, parameters);
  }

  public static void main(String[] args) throws Exception {
    Class[] parameterTypes = new Class[1];
    parameterTypes[0] = String.class;
    Method functionToPass = Main.class.getMethod("functionToPass", parameterTypes[0]);
    Main main = new Main();
    main.outerFunction(main, functionToPass, "This is the input");
  }
}

Voici un autre exemple de la même méthode. Nous créons une fonction qui a également une valeur de retour.

import java.lang.reflect.Method;

public class Main {
  public int functionToPass(String message) {
    return message.length();
  }

  public void outerFunction(Object object, Method method, String message) throws Exception {
    Object[] parameters = new Object[1];
    parameters[0] = message;
    System.out.println(method.invoke(object, parameters));
  }

  public static void main(String[] args) throws Exception {
    Class[] parameterTypes = new Class[1];
    parameterTypes[0] = String.class;
    Method functionToPass = Main.class.getMethod("functionToPass", parameterTypes[0]);
    Main main = new Main();
    main.outerFunction(main, functionToPass, "This is the input");
  }
}

Article connexe - Java Function