java - 臭名昭著的 Goto、Java、自动代码

标签 java code-generation goto label internal-class

假设您有这样的 Java 代码:

public class MyClass {
    public static Object doSmthg(Object A,Object B){
        if(smthg){ //if is given has an example, it can be any thing else
            doSmthg;
            GOTO label;
        }
        doSmthg;

        label;
        dosmthg1(modifying A and B);
        return an Object;
    }
}

我正在自动生成代码。当生成器到达生成 goto 的那一刻(并且它不知道它位于 if block 中)时,它不知道之后会发生什么。

我尝试使用标签、中断、继续,但这不起作用。

我尝试使用内部类(执行 dosmthg1),但 A 和 B 必须声明为最终类。问题是A和B必须修改。

如果没有其他解决方案,我将不得不在我的生成器中传播更多知识。但我更喜欢一个更简单的解决方案。

有什么想法吗?

提前致谢。

最佳答案

public static Object doSmthg(Object A,Object B){
    try {
    if(smthg){ //if is given has an example, it can be any thing else
        doSmthg;
        throw new GotoException(1);
    }
    doSmthg;

    } catch (GotoException e) {
         e.decrementLevel();
        if (e.getLevel() > 0)
            throw e;
    }
    dosmthg1(modifying A and B);
    return an Object;
}

人们可以在异常情况下执行 goto,但为了定位正确的“标签”,必须检查异常消息或考虑嵌套级别。

我不知道我是否觉得这不更丑。

关于java - 臭名昭著的 Goto、Java、自动代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10480722/

相关文章:

java - 创建日历事件时如何创建警报?

c99 转到过去的初始化

Java 8编译器插件: How to add super() call in a constructor?

ruby - Ruby 中运行时代码生成的最佳实践

c - goto 的可接受用途是什么?

c++ - 使用 goto 是打破两个循环的合法方式吗?

JavaFX 2 TreeView 将焦点从 TreeView TreeCell 更改为

java - java中使用滚轮缩放

java - 在 Java 中,如何打印类似于座位表的二维数组?

mysql - 通过JPA向MySQL添加新列