为什么带有显式返回的空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)的调用者。