代码之家  ›  专栏  ›  技术社区  ›  Finbarr

Java返回到调用堆栈中的位置n

  •  1
  • Finbarr  · 技术社区  · 15 年前

    使用 return Java代码中的关键字将返回执行到调用堆栈中的最后一个调用代码。if对象 foo 电话 baz.bar() , the 返回 中的关键字 bar 方法将在中继续执行代码

    假设我有目标 那叫 foofoo 那叫 foofoofoo 在上述场景中,以及 福福福 电话 巴兹酒吧() . 在Java中是否有使用 返回 关键字或其他内容,以便 酒吧 方法可以返回到 ?

    (没有抛出异常)

    3 回复  |  直到 15 年前
        1
  •  2
  •   Michael Madsen    15 年前

    不,这是不可能的。你必须自己用代码来处理这个问题,一次处理一个级别(一个异常也会这样做,只是自动化程度更高一点)。

    不过,无论如何,这样做可能不是个好主意。假设你突然需要打电话 baz.bar() quux ,不接触 foo 完全。如果现在发生了什么 bar 试图返回 ,哪个不在调用堆栈中?如果你只想让它上升n个级别,你能想象如果你合并的话可能会发生的问题吗? foofoofoo 进入之内 foofoo ,或将其更改为添加 foofoofoofoo ,但不记得修改 酒吧 ?

    一个异常听起来正是这个工作的正确工具: 巴兹酒吧() 不应该在意它必须去 ,它应该知道一些事情 异常的 已经发生了,要求它中止正在做的事情,然后 应该知道这种特殊情况会发生并处理它(即使它什么都不做也是如此)。如果要避免向所有内容中添加throws子句,请改用未经检查的异常。

        2
  •  1
  •   starblue    15 年前

    幸运的是,这在Java中是不可能的。

    很少有类似的事情是有意义的,例如在操作系统内核中进行上下文切换。

    但在应用程序中这样做绝对是错误的。

        3
  •  0
  •   chi42    15 年前

    我不是一个巨大的Java家伙,所以我不能肯定,但这听起来不像是一个安全的事情,我怀疑这将在Java中得到支持。

    现在是这个C/C++,你可以做一个脏的小黑客来覆盖堆栈上的返回地址…