【问题标题】:Java Reusing interface methodsJava重用接口方法
【发布时间】:2017-03-26 07:55:05
【问题描述】:

这是我正在使用的界面:

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。

怎么做?

【问题讨论】:

  • 假设我正在实现您的add 方法。你用add((a, b, c) -> System.out.println("")); 调用它。如果在add 的实现中,我调用c.add(1,2,3,4,5);,你期望会发生什么?为什么会这样?

标签: java interface functional-programming expression


【解决方案1】:

functional interface 按照设计允许只有一种方法,因此您尝试做的事情不能直接完成,原因很清楚:允许使用 lambda 实现功能接口必须创建一个有效的对象对于它的声明,如果它有两个方法,你不能用一个 lambda 来实现它们。

一种解决方法可能是使用可变参数,例如:

@FunctionalInterface
interface Command {
 void run(int... args); 
}

add(args -> { int z = args[0] + args[1] + args[2]; });

【讨论】:

  • 我猜该方法工作正常,但是我必须将参数作为调用方法的实例: ((Automobile)args[0]).getInCar() 是否有怎样才能做得更好?
猜你喜欢
  • 1970-01-01
  • 2019-03-04
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2016-04-19
  • 2014-01-26
相关资源
最近更新 更多