java中有一种setjmp/longjmp吗?

Is there a kind of setjmp/longjmp in java?

我承认,如果可能的话,它会为糟糕、非常糟糕的代码敞开大门……但在某些特定情况下……

所以问题是,是否有 setjmp/longjmp 的等价物?

我想在不使用线程的情况下实现类似 python 的生成器,只需保存堆栈和上下文,稍后再恢复。

简单回答:没有没有!您能得到的最接近的东西是标记为 breaks,这是一种向前跳转以跳出多个嵌套块,仅此而已!

虽然并不严格等同于 C longjump,但来自 apache commons 的 Javaflow 库提供了一种中断代码流的方法(与 Exceptions 一样,但需要捕获堆栈),并在稍后重新启动它。 这适合实现协程。但是需要修改字节码。

http://commons.apache.org/sandbox/commons-javaflow/index.html