【问题标题】:Java compilation behaviorJava 编译行为
【发布时间】:2011-12-04 06:33:14
【问题描述】:

在下面的代码中,为什么没有最后一个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?
}

【问题讨论】:

  • 简化的例子可以是boolean syntaxCheck() { if (true) { return true; } return false;/* why is 'return false' necessary?*/ }

标签: java compilation compiler-errors


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    对于这种情况,您需要第二个 return 语句。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          您可能确实需要“return”,因为如果两个“if”语句都是错误的,会发生什么?

          【讨论】:

            【解决方案6】:

            如果iffor里面的return没有被执行,我们仍然需要返回一个值。所以需要return 声明。

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-09-05
              • 1970-01-01
              • 2011-12-01
              • 2013-12-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多