2011-08-28 231 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方法。他們不會將例外傳遞給調用方法,而是以開發人員認爲合適的方式在內部處理它。

如果出於調試目的,如果出現異常情況,您需要查看結果值,那麼波希米亞的想法很有效。