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

red*_*der 9 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 7

你的意图很可能是什么

(doThis ? this::fooThis : (Runnable) (this::fooThat)).run();
Run Code Online (Sandbox Code Playgroud)

Java无法单独从方法名称推断出您希望?:返回的类型.

我不确定这比这更好

if (doThis)
    fooThis();
else
    fooThat();
Run Code Online (Sandbox Code Playgroud)


Fed*_*ner 5

这样做的方法如下:

Runnable r = (doThis ? this::fooThis : this::fooThat);
r.run();
Run Code Online (Sandbox Code Playgroud)

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

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