Есть ли в java вид setjmp/longjmp?
Я признаю, что если это возможно, это будет открытой дверью для плохого, очень плохого кода... Но в некоторых конкретных случаях...
Итак, вопрос в том, существует ли какой-либо эквивалент c setjmp / longjmp?
Я хотел бы реализовать Python-подобный генератор без использования потоков, просто сохранив стек и контекст, и восстановив его позже.
2 ответа
Простой ответ: нет, нет! Самое близкое, что вы можете получить, это помеченные разрывы, которые являются своего рода прыжками вперед, чтобы пробиться из нескольких вложенных блоков, но это так!
Несмотря на то, что это не совсем эквивалентно C longjump, библиотека Javaflow из apache commons дает возможность прерывать поток кода (как это делают исключения, но с захватом стека) и перезапускать его позже. Это подходит для реализации сопрограмм. Однако это требует модификации байт-кода.
http://commons.apache.org/sandbox/commons-javaflow/index.html