2013-09-10 40 views
0

有沒有什麼辦法從內部函數返回外部函數的值(或者只是return;)?從Java的嵌套函數的內部函數返回外部函數的值(或什麼也沒有)

我的問題是類似這樣的問題: Breaking out of nested loops in Java,但不同的是,在這個問題的提問者問打破了嵌套循環的外循環,而我詢問返回在嵌套函數外部函數。

public void outerFunction() 
{ 
    runOnUiThread (new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      // Here i want to return;, so the function will not continue after runOnUiThread 
     } 
    }); 

    // Code here should not run. 

} 
+2

你在看什麼是,惱人的線程實例作爲方法調用的一部分,而不是函數/方法內的函數/方法。 – kosa

回答

1

方法runOnUiThread接受Runnable參數。我們可以假設它在某處使用其run()方法。例如,如果方法

public void runOnUiThread(Runnable runnable) { 
    // do a bunch of stuff 
    // some more logic 
    runnable.run(); 
    // more logic 
    return; 
} 

你不能從調用的方法(run())強制調用方法(runOnUiThread())的return。然而,你可以在被調用的方法中拋出一個Exception,它會停止所有的執行,但是你不一定知道哪裏會被捕獲。

0

我不確定我是否理解這個問題。但我認爲你對多線程不是很熟悉。

Runnable內的代碼和runOnUiThread調用後的代碼實際上同時運行,但在不同的線程上運行。因此,它與嵌套循環或單線程嵌套方法調用相距甚遠。

實際上你可以對另一個線程進行「阻塞」調用來等待一個值,但我認爲把它寫在一個stackoverflow答案中並不合適。你應該閱讀多線程,我強烈建議Java Concurrency in Practice。但是,你應該被警告,這不是一個你可以在幾天內拿起的小問題。你也可以看看this tutorial;接口Future實現我所指的「阻塞」呼叫。

編輯
我在Java中寫了上述思想。事情與Android更復雜,因爲要使用Future,您需要爲UI線程獲得ExecutorService,我不確定這是可能的。

有很多Android特定的多線程構造(例如參見this tutorial或官方文檔)。解決您的問題當然是可能的,但我們沒有足夠的細節。另外,你可能不應該試圖爲你的問題找到一個快速解決方案,但重新考慮你的整個設計,以便自然適合Android多線程範例。