Java编译行为

时间:2011-12-04 06:33:14

标签: java compilation compiler-errors

在下面的代码中,为什么没有最后一个return语句就不能编译。

private boolean fileExists(final File[] files, final String name) {
   if (files == null || files.length == 0) {
        return false;
    }
   for (final File file : files) {
        return true;
    }
    return false;  // why is this neessary?
}

6 个答案:

答案 0 :(得分:3)

如果files为空,则不进入循环,但函数需要返回boolean。这就是为什么

答案 1 :(得分:1)

因为如果files为空会发生什么?

您需要针对该案例的第二个return语句。

答案 2 :(得分:1)

因为files可能是空的。该方法必须在签名中定义的所有情况下返回布尔值!

答案 3 :(得分:1)

如果files为空(毕竟编译器不知道),则不会返回任何内容。

答案 4 :(得分:1)

因为您声明该方法返回一个布尔值

private boolean fileExists(final File[] files, final String name)

如果您不希望它返回任何内容,则将该方法声明为'void'

private void fileExists(final File[] files, final String name)

你可能确实需要'return',因为如果两个'if'语句都是假的,会发生什么?

答案 5 :(得分:-3)

如果returnif内的for未执行,我们仍需要返回一个值。因此需要return语句。

查看代码,我们看到iffor中的返回将被命中,但编译器无法推断出这一点。