如何在 Java 中将函数作为参数传递
本文将讨论如何在 Java 中把一个函数作为参数传递给另一个函数。
我们将讨论两种不同的方法来传递一个函数作为 Java 中的参数。
在 Java 中使用一个 interface
的实例来传递一个函数作为参数
在这个方法中,你需要在实现一个只包含该方法框架的接口的类中写出你需要传递的函数作为参数。
下面的例子就说明了这一点。
我们定义了一个接口 Callable
,它包含了我们打算作为参数传递的函数骨架。接下来,我们定义一个实现 Callable
的类,它包含了函数的完整定义。这个函数可以传递给另一个函数,比如 newFunction(Callable callable, int param)
,其中 callable
代表接口 Callable
的一个实例。
一个完整的工作示例在下面的代码中显示。
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);
}
}
输出:
> 10
在 Java 中使用 java.lang.reflect.Method
传递一个函数作为参数
我们有一个函数 functionToPass
,我们需要将其作为参数传递给函数 outerFunction
。
我们定义 functionToPass
的方式没有什么不同,但是,我们需要按照特定的语法来定义 outerFunction
:outerFunction(Object 对象,Method 方法,param1,param2,...)
。
请看下面的例子:
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");
}
}
下面是另一个相同方法的例子。我们正在创建一个也有返回值的函数。
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");
}
}
相关文章
修复 Java 无效方法声明;需要返回类型
发布时间:2023/09/20 浏览次数:174 分类:Java
-
如何修复无效的方法声明; Java 中需要的返回类型。无效的方法声明;需要返回类型。当你声明一个函数并且没有提及它的返回类型时,Java 中会发生这种类型的错误。
在 Java 中创建回调函数
发布时间:2023/09/20 浏览次数:83 分类:Java
-
本教程演示如何在 Java 中创建和使用回调函数。我们使用接口来实现 Java 中的回调,因为它不支持函数指针。本文介绍如何在 Java 中创建和使用回调函数。
Java 中用于垃圾回收的 System.gc()
发布时间:2023/09/19 浏览次数:84 分类:Java
-
本文介绍了如何在 Java 中使用 System.gc() 进行垃圾收集。System.gc() 是 Java 中提供的用于垃圾收集的 API,它执行自动内存管理。
在 Java 中从一个函数中返回空值
发布时间:2023/09/19 浏览次数:186 分类:Java
-
本文介绍如何在 Java 中的函数中不返回任何内容。每个在其签名中具有返回类型的函数都必须返回相同类型的值,否则编译将产生错误,并且代码将不会执行。
Java 中的虚拟函数
发布时间:2023/09/19 浏览次数:153 分类:Java
-
本文介绍什么是 Java 中的虚拟函数/方法。本文介绍了什么是 Java 中的虚拟函数/方法以及如何使用 Java 中的虚拟函数。
在 Java 中返回一个布尔方法
发布时间:2023/09/19 浏览次数:51 分类:Java
-
本教程说明了如何在 Java 中返回布尔方法。本文将介绍在 Java 中返回布尔型方法的方法。Java 中带有 return 语句的布尔方法的结构
在 Java 中播放声音
发布时间:2023/09/19 浏览次数:151 分类:Java
-
本教程介绍了用 Java 播放音频文件方法。Java 应用程序有时会被要求播放音频文件。鉴于声音是基于时间的数据,因此必须以正确的速率传递声音才能呈现出来,以供用户感知。
如何在 Java 中向一个数组添加新元素
发布时间:2023/09/19 浏览次数:187 分类:Java
-
讨论如何在 Java 中向一个数组中添加新元素。由于数组的大小是固定的,可能的解决方法是使用数组列表或创建一个新的数组,将之前数组中的所有元素复制过来,然后再添加一个新元