1

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

假设我有foo调用上述场景foofoo中调用的对象,并调用. 无论如何在Java中使用关键字或其他东西,以便方法中的代码可以一直返回到?foofoofoofoofoofoobaz.bar()returnbarfoo

(没有例外)

4

3 回答 3

2

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

但是,无论如何,这样做可能不是一个好主意。假设您突然需要从 调用baz.bar(),而根本quux没有接触foo。如果bar尝试返回foo不在调用堆栈中的 ,现在应该发生什么?如果你只是想让它升N级,你能想象如果你合并foofoofoofoofoo,或者改变它添加一个foofoofoofoo,而不记得修改可能发生的问题bar吗?

一个异常听起来与这项工作的正确工具完全一样:baz.bar()不应该关心它必须去foo,它应该知道发生了一些异常情况,要求它中止它正在做的事情,然后foo应该知道这种异常情况可能会发生并且处理它(即使它什么都不做也是这种情况)。如果是为了避免必须向所有内容添加 throws 子句,请改用未经检查的异常。

于 2010-05-04T22:23:46.933 回答
1

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

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

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

于 2010-05-04T22:24:50.787 回答
0

我不是一个 Java 大佬,所以我不能肯定地说,但这听起来并不安全,我怀疑 Java 是否支持这一点。

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

于 2010-05-04T22:21:49.070 回答