【问题标题】:Java - multiple return statements - first one not returning?Java - 多个返回语句 - 第一个不返回?
【发布时间】:2015-08-14 23:52:27
【问题描述】:

我正在玩弄一些 Android 编程,并且正在编写几个方法来打开和关闭文件。好吧,我想对文件做一些基本的检查,如果满足条件则返回 true,如果到达方法的末尾则返回 false。

我正在使用 AndroidTestCase 测试这些,并且在我向清单添加了所需的权限以修复我的“canRead()”调用后,我开始逐步检查它们。我看到调试器点击了我的“return true”语句,但随后越过它,它继续到下一行“return false”而不是实际返回。

我知道我可以将“return false”包装在一个 else 块中,但我只是好奇为什么函数在应该返回后继续执行。 “if”块中的 return 语句是刚刚从块中返回,还是应该从整个函数调用中返回?

public boolean OpenFile(String testFile) {
    myFile = new File(testFile);
    if (myFile.exists() && myFile.isFile() && myFile.canRead()) {
        return true;
    }
    return false;
}

public boolean CloseFile() {
    if (myFile != null ) {
        return true;
    }
    return false;
}

【问题讨论】:

  • return所在的位置无关,问题是条件不满足。
  • 尽量避免if(expression) return true/false; 模式。可能是return myFile.exists() && myFile.isFile() && myFile.canRead();return myFile != null;
  • return 总是在执行时立即从函数调用返回。你所描述的没有发生。您可能会错误地解释调试时看到的内容。添加一些日志语句并向我们展示输出。
  • 在返回值之前尝试打印,。查看实际行为
  • @AlexisC。这个表达式里面会有额外的逻辑,“return true”只是一个占位符,用于测试我的测试。

标签: java android debugging return


【解决方案1】:

如果if 语句中的条件为真,则return true; 将被执行并且方法终止。

要检查这一点,只需在return false; 指令之前放置一个println(...),您会看到它不会被执行。再次检查你的调试,你可能被这个工具弄糊涂了。

【讨论】:

  • 是的,我只是对步进的工作方式感到困惑。在测试方法中的调用上设置断点后,我能够验证它是否按预期返回 true。
猜你喜欢
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 2011-01-03
  • 1970-01-01
相关资源
最近更新 更多