为什么我不能从方法显式返回 void?

2022-08-31 17:37:06
void run() {
    ...
    if (done) return cancel();
    ...
}

其中 返回 .这不会编译...我几乎可以理解为什么。但是,如果我想从虚空中返回一个空洞,为什么不呢?相反,我最终写了这样的东西:cancel()void

if (done) {
    cancel();
    return;
}

我不是在寻找代码风格建议,我想知道为什么Java明确禁止这种类型的void返回。任何信息都是值得赞赏的,谢谢。


答案 1

这是一个有趣的问题。由于java强制执行返回类型(是返回类型),因此您的第一个语句似乎有意义。我只会把这个当作惯例。由于 是占位符而不是对象,因此可能决定将其省略,以保持语言一致性或编译器的简单性。voidvoid

JLS

不带 Expression 的 return 语句必须包含在使用关键字 void 声明的方法的主体中,不返回任何值 (§8.4)或构造函数的主体 (§8.8)。

进一步

确切地说,没有表达式的 return 语句总是突然完成,原因是没有值的返回


答案 2

带有表达式的 return 语句返回该表达式的值。的类型是 void 表达式 - 它没有值。cancel()

从逻辑上讲,你想执行,然后返回 - 所以这就是你必须说的。这两个操作(调用然后返回)在逻辑上是不同的。cancel()cancel()

现在Java可以有一种“单位”类型,而不是 - 但这会影响而不仅仅是返回值。void