Java中如何把函数作为参数传入
时间: 2024-01-26 09:05:06 浏览: 224
在Java中,函数也可以被看作是一种数据类型,因此可以像其他数据类型一样作为参数传递给另一个函数。这种函数作为参数传递的方式被称为函数指针或者回调函数。
Java中实现函数作为参数传递的方式主要有两种:使用接口和使用Lambda表达式。下面分别介绍这两种方式。
1. 使用接口
首先,我们需要定义一个接口,该接口中包含了我们要传递的函数的声明,例如:
```
public interface MyInterface {
void doSomething(int a, int b);
}
```
然后,在另一个函数中,我们可以将这个接口作为参数进行传递,例如:
```
public static void doAnotherThing(int a, int b, MyInterface myInterface) {
// 调用传递进来的函数
myInterface.doSomething(a, b);
}
```
在调用`doAnotherThing`函数时,我们可以将一个实现了`MyInterface`接口的类的对象作为第三个参数传递进去,例如:
```
public static void main(String[] args) {
doAnotherThing(1, 2, new MyInterface() {
@Override
public void doSomething(int a, int b) {
System.out.println("a + b = " + (a + b));
}
});
}
```
上面的代码中,我们创建了一个匿名内部类来实现`MyInterface`接口,并且在`doSomething`方法中实现了我们要传递的函数的逻辑。然后将这个匿名内部类的实例作为第三个参数传递给`doAnotherThing`函数。
2. 使用Lambda表达式
在Java 8中,引入了Lambda表达式,可以更方便地实现函数作为参数传递。Lambda表达式可以看作是一种匿名函数,可以直接将其作为参数传递。
例如,我们可以直接将一个Lambda表达式作为第三个参数传递给`doAnotherThing`函数,例如:
```
public static void main(String[] args) {
doAnotherThing(1, 2, (a, b) -> System.out.println("a + b = " + (a + b)));
}
```
上面的代码中,我们使用Lambda表达式来实现要传递的函数的逻辑,然后将这个Lambda表达式作为第三个参数传递给`doAnotherThing`函数。
需要注意的是,Lambda表达式只能传递给只有一个抽象方法的接口,这种接口被称为函数式接口。因此,我们需要定义一个只有一个抽象方法的接口,并将Lambda表达式赋值给这个接口的变量,例如:
```
public interface MyInterface {
void doSomething(int a, int b);
}
public static void doAnotherThing(int a, int b, MyInterface myInterface) {
// 调用传递进来的函数
myInterface.doSomething(a, b);
}
public static void main(String[] args) {
MyInterface myInterface = (a, b) -> System.out.println("a + b = " + (a + b));
doAnotherThing(1, 2, myInterface);
}
```
阅读全文