这是我使用的界面:
interface Command {
void run(int a, int b, int c);
void run(int a, int b, int c, int d, int e);
}
void add(Command c){
}
这是执行:(使用第一次运行方法)
add((a, b, c) -> System.out.println(""));
我执行的错误是:
The target type of this expression must be a functional interface
当我注释掉第二次运行方法时,这只会消失。
我希望能够使用两种运行方法执行相同的接口,而不必仅使用方法2创建新接口。
如何?
答案 0 :(得分:1)
设计functional interface只允许有一种方法,所以你要做的就是不能直接完成,很清楚为什么:允许用lambda实现一个功能接口必须创建一个对象对于它的声明是有效的,如果它有两个方法你不能用一个lambda实现它们。
解决方法可能是使用可变参数,例如:
@FunctionalInterface
interface Command {
void run(int... args);
}
add(args -> { int z = args[0] + args[1] + args[2]; });