Java 8 - 三元运算符返回函数不编译

时间:2016-04-21 12:11:54

标签: java java-8

有谁能告诉我为什么不编译?

public class TestClass {

    private boolean doThis = false;

    protected void fooThat() {}

    protected void fooThis() {}

    public void execute() {
        (doThis ? this::fooThis : this::fooThat).run();
    }
}

2 个答案:

答案 0 :(得分:7)

您的意图可能是

(doThis ? this::fooThis : (Runnable) (this::fooThat)).run();

Java无法单独从方法名称推断出?:返回的类型。

我不确定这比

更好
if (doThis)
    fooThis();
else
    fooThat();

答案 1 :(得分:5)

这样做的方法如下:

Runnable r = (doThis ? this::fooThis : this::fooThat);
r.run();

您的代码无法编译,因为:

  1. 分配值时必须使用三元运算符。在您的代码中不是这种情况。
  2. 方法引用和lambda表达式必须与功能接口匹配,以便稍后调用其单个抽象方法。在您的代码中,您没有为方法引用指定任何功能接口,因此没有类型可以在以后调用方法run()