2011-08-28 189 views
19

我正在使用API​​,声称如果成功则返回true;如果失败,则返回false。但是,它也宣称如果失败,会抛出不同的例外。它如何返回false并抛出异常?返回值并抛出异常?

回答

25

无法同时抛出异常并从单个函数调用返回值。

如果出现错误,它可能会返回false,但如果输入无效则抛出异常。

编辑:PaulPRO贴指出这是技术上可能导致异常在不同的线程中被抛出,而在当前的返回值(现已删除)回答。我认为这值得注意,即使这不是你应该看到的。

+0

那就是我想的。尽管如此,我认为可能会有一些窍门。 – mark

+0

一旦抛出异常,你的程序就会停止运行,所以我不可能同时执行这两个操作。我想知道在'try'块中是否​​有return语句,程序是否仍然通过'final'块,因为如果你在try块中返回一个值,并且在Final块中放入一个Exception Exception,你会已经完成了这两个步骤。 –

+2

@ Karel-Jan错误:不,在Java中,您的程序会执行** DEFINITELY NOT **一旦抛出异常就停止运行。您对Java异常如何工作感到困惑,显然还没有完成任何多线程Java编程。当另一个线程中发生未经检查的异常时,您可以让很多线程愉快地继续工作。在很多情况下,死亡线程会自动重新启动(最着名的是某些OS/JVM上的Swing EDT:如果EDT死亡,将重新启动一个新的EDT)。 – SyntaxT3rr0r

14

你可以抛出一个异常一个(在这种情况下,布尔)值:

public class ValueException extends Exception { 
    final boolean value; 

    public ValueException(boolean value, String message) { 
     super(message); 
     this.value = value; 
    } 

    public boolean getValue() { 
     return value; 
    } 
} 
0

虽然可以编写代码以这样的方式,一个例外,一个值可以推导从一个函数调用(见上面的帖子),它不应该用正确的编码来完成。

我很想看看这个API的文档链接。 API应该优先考虑清晰度。抛出异常并返回值会留下返回的值是否安全使用或者是否无效的问题。

请记住,try/catch块是处理异常的OTHER方法。他们不会将例外传递给调用方法,而是以开发人员认为合适的方式在内部处理它。

如果出于调试目的,如果出现异常情况,您需要查看结果值,那么波希米亚的想法很有效。