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

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

public class TestCase { private final java.util.function.Consumer 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,还是我在这里缺少一些语言设计?

编辑:这不是一个重复的构造函数如何返回一个值 ,这实际上是一个构造函数,并不是构造函数的返回值,而是变量初始化。

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


您可以在构造函数内return

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