我正在学习接口,我遇到了一个我不理解的问题,是关于lambda表达式的,我学过的,可以用在一行中,但是我创建了一个case,这个表达式不起作用,我不知道哪里出错了。
我已经定义了这个接口:
public interface MathOperations {
int add(int a, int b);
}
接下来我定义了一个类,我想在这个类中用adder方法测试这个接口。
public class App {
public static void main(String[] args) {
int x;
x = adder((a, b) -> return a+b);
}
public static int adder(MathOperations mo){
return mo.add(3, 5);
}
}
不幸的是,带有x
赋值语句的那一行不起作用,我不知道哪里出错了。编译器无法识别return
语句中的a
和b
变量。我知道我可以用括号进行赋值,但我很好奇我是否可以在一行中完成。
1条答案
按热度按时间pxy2qtax1#
这里有两种方法来做你想做的事情。
a
和b
的定义。以上所述在幕后基本上完成了以下工作。
anonymous class
是使用接口定义的,并使用new
关键字示例化(类包含实现的方法)。FuntionalInterfaces
和lambdas的概念之前,实现该接口是标准的。adder
方法,提供刚刚创建的示例mo
或使用之前创建的compute
lambda调用该方法。上述三个print语句的输出
一个三个三个一个
API functional interfaces
创建一个更通用的接口。名称MathOperation
很好,但add方法太具体(并且函数接口只能包含一个abstract method
)。因此,不要使用add
方法,而使用compute
或类似方法,并让lambda的name
指示其operation.