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

2022-09-04 21:38:30

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

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进行编译。

智能英特尔输出:

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

javac output:

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

现在奇怪的是,删除或将修复错误。这是一个java错误,还是我在这里缺少一些语言设计?return;Consumer

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


答案 1

你可以在这里找到官方的错误报告。此问题已在 Java 9 中修复。


您可以在构造函数内返回

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


答案 2

推荐