为什么带有显式返回的空lambda和构造函数会导致编译器错误(Java Bug?)

时间:2016-07-27 22:09:24

标签: java lambda java-8

我有一个可重复的测试用例:

public class TestCase {

    private final java.util.function.Consumer<Object> emptyCallback = result -> {};

    public TestCase() {
        return;
    }

    public static void main(String... args) {
        new TestCase();
    }
}

使用Java 8,更新51(Oracle JDK)。这不能使用IntelliJ和javac进行编译。

IntelliJ输出:

Error(6, 7): java: variable result might not have been initialized

javac输出:

TestCase.java:6: error: Variable result might not have been initialized
        return;
        ^
1 error

现在奇怪的是,删除return;Consumer会解决错误。这是一个java bug,还是我在这里缺少一些语言设计?

编辑:这不是How can a constructor return a value的副本,这实际上是一个构造函数,并不是关于构造函数的返回值而是变量初始化。

1 个答案:

答案 0 :(得分:12)

您可以找到官方错误报告here。该问题已在Java 9中修复。

You can return inside a constructor

  

return语句将控制权返回给方法的调用者(§8.4,   §15.12)或构造函数(§8.8,§15.9)。