Wie übergibt man eine Funktion als Parameter in Java

Hassan Saeed 12 Oktober 2023
  1. Verwenden Sie eine Instanz einer interface, um eine Funktion als Parameter in Java zu übergeben
  2. Verwenden Sie java.lang.reflect.Method, um eine Funktion als Parameter in Java zu übergeben
Wie übergibt man eine Funktion als Parameter in Java

In diesem Tutorial wird besprochen, wie man eine Funktion als Parameter an eine andere Funktion in Java übergibt.

Wir werden zwei verschiedene Methoden besprechen, um eine Funktion als Parameter in Java zu übergeben.

Verwenden Sie eine Instanz einer interface, um eine Funktion als Parameter in Java zu übergeben

In dieser Methode müssen Sie die Funktion, die Sie als Parameter übergeben müssen, in eine Klasse schreiben, die eine Schnittstelle implementiert, die nur das Skelett dieser Methode enthält.

Das folgende Beispiel veranschaulicht dies.

Wir definieren eine Schnittstelle Callable, die das Funktionsskelett enthält, das wir als Parameter übergeben wollen. Als nächstes definieren wir eine Klasse, die Callable implementiert und die die vollständige Definition der Funktion enthält. Diese Funktion kann an eine andere Funktion wie newFunction(Callable callable, int param) übergeben werden, wobei callable eine Instanz der Schnittstelle Callable darstellt.

Ein vollständig funktionierendes Beispiel ist im nachfolgenden Code dargestellt.

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

Ausgabe:

> 10

Verwenden Sie java.lang.reflect.Method, um eine Funktion als Parameter in Java zu übergeben

Wir haben eine Funktion functionToPass, die wir als Parameter an die Funktion outerFunction übergeben müssen.

Es gibt keinen Unterschied in der Art und Weise, wie wir functionToPass definieren; wir müssen jedoch einer bestimmten Syntax folgen, um die outerFunction zu definieren: outerFunction(Object object, Method method, param1, param2, ...).

Sehen Sie sich das folgende Beispiel an:

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

Hier ist ein weiteres Beispiel der gleichen Methode. Wir erstellen eine Funktion, die auch einen Rückgabewert hat.

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

Verwandter Artikel - Java Function