Java 如果函数已经保证返回或抛出,为什么必须指定返回值?

Java 如果函数已经保证返回或抛出,为什么必须指定返回值?,java,exception,Java,Exception,我不必在保证引发异常的函数中指定返回值,因为该路径无效: // Works fine! public boolean a() { throw new RuntimeException(); } 我不明白为什么我不能在这里做同样的事情: // Error: This method must return a result of type boolean public boolean a() { try { return mayReturnOrThrow(); }

我不必在保证引发异常的函数中指定返回值,因为该路径无效:

// Works fine!
public boolean a() {
   throw new RuntimeException();
}
我不明白为什么我不能在这里做同样的事情:

// Error: This method must return a result of type boolean
public boolean a() {
   try {
      return mayReturnOrThrow();
   }
   catch (Exception ex) {
      new RuntimeException(ex);
   }
}
我在这里遗漏了什么?

新的运行时异常(ex)只是生成一个异常,然后什么也不做-这是一个无用的no操作。你会想把它扔出去:

throw new RuntimeException(ex);

您的
catch
块不会抛出异常,它只是创建一个异常,然后忽略它,因此catch块将完成,您将到达方法的末尾,而不返回任何内容。这应该是答案,而不是注释,Jon。但我想你是想让其他人有机会获得分数。我认为我们应该把它作为一个打字错误来结束,OP完全知道它应该如何工作,只是漏掉了一个字。。。干杯@MichaelPiefel:根据Andrew的评论,我认为这更像是一个打字错误的问题。谢谢。我知道我遗漏了一些非常微妙的东西。逻辑错误在键盘后面。