【问题标题】:Returning value (or nothing) for outer function from inner function of nested functions in Java从Java中嵌套函数的内部函数返回外部函数的值(或无)
【发布时间】:2013-09-14 16:01:24
【问题描述】:

有什么方法可以从内部函数返回外部函数的值(或只是 return;)?

我的问题类似于这个问题: 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.

}

【问题讨论】:

  • 您正在查看的是,作为方法调用一部分的烦人线程实例,而不是函数/方法中的函数/方法。

标签: java android function methods nested


【解决方案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,这将停止所有执行,但您不一定知道它在哪里被捕获。

【讨论】:

    【解决方案2】:

    我不确定我是否理解这个问题。但我假设你对多线程不是很熟悉。

    Runnable 中的代码和调用runOnUiThread 之后的代码实际上是同时运行的,但是在不同的线程上。因此,它与嵌套循环或单线程嵌套方法调用相距不远。

    您实际上可以对另一个线程进行“阻塞”调用以等待一个值,但我认为将所有这些都写在 stackoverflow 答案中是不合适的。你应该阅读多线程,我强烈推荐Java Concurrency in Practice。但是应该警告您,这不是一个可以在几天内完成的微不足道的话题。也可以看this tutorial;接口Future 实现了我所指的“阻塞”调用。

    编辑
    我用Java写了上面的想法。 Android 的情况更复杂,因为要使用 Future,您需要为 UI 线程获取 ExecutorService,我不确定这是否可行。

    有许多特定于 Android 的多线程构造(参见例如 this tutorial,或官方文档)。当然可以解决您的问题,但我们没有足够的细节。此外,您可能不应该尝试为您的问题找到快速解决方案,而应重新考虑您的整个设计,以便自然地适应 Android 多线程范式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      相关资源
      最近更新 更多