2011-05-05 131 views
2

我有一個函數,在執行過程中,在debuger中同時運行if和return函數結束時的返回值。爲什麼這個java代碼執行多個返回語句

我感到困惑我認爲返回語句返回值,並停止在該方法中的執行流程?

我已經得到它的工作,但想知道爲什麼它這樣做。

下面是一個例子。 json將在答案和createapprove塊上失敗。它得到創建失敗和Ret成爲真(解析JSON)。返回retval運行,然後代碼跳轉到最終返回retval並將其作爲函數的返回值執行。

我正在使用在android模擬器上運行的程序在調試模式下遍歷ecipse中的代碼。

public static ComModelFromServer createModelFromJSON(String json) throws JSONInvalidException {  
    boolean ret = false; 
    ComModelFromServer retval = null; 

    //Answer Block 
    Answer a = new AnswerAsset(); 
    ret = a.tryToParseFromJSON(json); 
    if(ret == true) { 
     retval = a; 
     return retval; 
    } 

    Create cr = new CreateApprove(); 
    ret = cr.tryToParseFromJSON(json); 
    if(ret == true) { 
     retval = cr; 
     return retval; 
    } 

    cr = new CreateFail(); 
    ret = cr.tryToParseFromJSON(json); 
    if(ret == true) { 
     retval = cr; 
     return retval; 
    } 

    if(ret == false) { 
     throw new JSONInvalidException("couldn't create model from JSON"); 
    } 

    return retval; 
} 
+0

我會添加每個tryToParseFromJSon可能會拋出一個JSONInvalidException,如果他們遇到了錯誤。 – huntsfromshadow 2011-05-05 20:39:28

+0

爲什麼你分配retval然後返回?爲什麼不只是例如。返回cr? – EJP 2011-05-06 00:12:41

回答

2

這可能沒有問題。編譯器可能編譯if語句中的return retval跳轉到該函數結尾處的return跳轉,其中已有return retval語句。調試器顯示奇數流量控制不是表示有什麼錯誤。

+0

我有類似的問題。必須有一些錯誤,eclipse調試器或android插件,其中一個不能按預期工作。但同意,返回的價值是第一個,第二個。 – 2011-07-08 09:16:37