生成Java源代码和跳转

时间:2011-01-08 20:28:32

标签: java

我正在生成Java代码,然后将被编译并加载回来。我的问题是我基本上需要跳转,因为当我从函数返回时我希望继续从循环中的点开始执行已退出。希望这里的代码说明了我的愿望。虽然实际代码也会有一些ifs并且更深入。

MyIter a,b,c;

boolean func() {
 jump to correct state here

 state0:

 a = ...;
 while (a.next()) {
   state1: while (b.next()) {
     return true; // start again at state1
   }
   b = ...;
 }

 c = ...;
 state2:
 while (c.next()) {
   return true; // start again at state2
 }
 return false;
}

在C中我可能会使用跳转表和状态变量。性能是关键,代码与Java应用程序交互。

到目前为止,我最好的猜测是:

  • 翻转循环和逻辑的嵌套。这变得太麻烦和有问题。
  • 添加逻辑以允许流程回到原来的位置,但这可能会很麻烦。
  • 我假设字节码可以跳转,所以我可以自己生成字节码,但这似乎并不理想(有没有好的库?)
  • 继续传递风格以避免返回,但这将涉及重大重组,虽然目前可能的方式。

我想知道是否有人有任何想法?

2 个答案:

答案 0 :(得分:2)

最简单的选择是使用开关块(或者如果必须,使用嵌套的switch语句)

enum State {
   state1, state2, state3;
}

State state = State.state1;

public boolean func() {
   while(true) {
     switch(state) {
        case state1:
            if(test()) return true;
            state = state2;
            break;
        case state2:
            if(test2()) return false;
            state = state3;
            break;
        case state3:
            if(test3()) return true;
            state = state1;
            break;
      }
   }
}

答案 1 :(得分:0)

Java协程库可能适合您的目的。有关指示,请参阅this related StackOverflow question