2012-02-04 91 views
-1

如果我有一個方法()該調用B(X):我可以讓一個方法調用者返回嗎?

int d = 0; 

void a(){ 
    int c = b(x); 
    d = c; 
} 

int b(x){ 
    if(somecondition){ 
     return x; 
    }else{ 
     retrun null; 
    } 
} 

有什麼辦法改變d之前a()回報,我可以寫功能b(x)因此,它使,如果我不想檢查c是從a()內部是null

+1

拋出一個[例外](http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html)......但僅限於「特殊」情況。 AFAIK,這樣做成本很高,所以不應該用於指導程序邏輯。 – 2012-02-04 23:20:04

+0

要添加到Mr. Cleese的答案... http://docs.oracle.com/javase/tutorial/essential/exceptions/index.html – 2012-02-04 23:24:06

回答

0

你爲什麼不使用一個簡單的if語句,如:

int d = 0; 

void a(){ 
    int c = b(x); 
    d = (c == null) ? d : c; 
} 

int b(x){ 
    if(somecondition){ 
     return x; 
    }else{ 
     return null; 
    } 
} 
+0

警告:'null'不是'int'。你可能必須在這裏使用'Integer'。 – 2012-02-04 23:41:14

+0

@sled:因爲我需要在許多方法中使用這個條件,比如'a()',它會使代碼變得很難看,但正如Alex所解釋的,沒有(有效的)方法來知道調用者。 @LouisWasserman:謝謝,對。提供'a()'和'b()'是爲了說明。我的「真正的」'a()'的輸出是一個對象,它是'thth's' null'。 – jomik 2012-02-05 14:25:57

0

你可能會有b(x)拋出一個異常,這將阻止分配到d。但那麼a()也不會正常返回。否則,如果不更改a()的代碼,則無法實現此目的。

0

您可以更改a()的控制流程b()而不更改a()的代碼的唯一方法是從b()引發異常。如果返回null是一個錯誤條件,那可能是個好主意。

如果null不是錯誤,那麼可能需要根據返回值做出某些決定,因此檢查null並明確決定可能是您的最佳選擇。

0

如果情況是,你會在你的代碼中調用b很多次,你想避免重寫你的一遍又一遍地檢查,然後我感到你的痛苦!

如果語言支持函數指針,你可以嘗試讓b接受一個函數指針(這將是a),並且只有在某些條件爲真時才執行該函數。不幸的是,這在Java中不是一個真正的選擇。

可能最好的是讓b拋出一個例外,就像「氣墊船全部鰻魚」建議的那樣。如果您的函數使用拋出SomeConditionException重新拋出異常,並在更高級別捕獲它們,則可以避免一些代碼重複。

相關問題