0

我想做这个:

在我的代码中,变量 X = 1。编译并运行代码。程序提示用户设置X,用户输入的X设置为2。下次我编译并运行我的代码时,我希望 X 在提示之前为 2。

您可以使用文件或数据库来读取/写入,但问题是我希望最终将上面的示例扩展到字段修改之外,以便能够从用户输入创建新字段或类。我询问 Java(使用 Eclipse)是因为我最熟悉它,尽管我在理解 ASM 集成及其使用方式方面遇到了麻烦。如果有人有像我这样的简单例子^^或者可以提供指导,我将不胜感激。要进行简单的字段修改,您是否可以使用 ASM 附加正在运行的类文件,或者您是否必须创建一个新的类文件(具有更新的字段)并删除原始文件?

4

1 回答 1

1

指导:使用旨在促进操作 Java 字节码的库,例如字节码工程库 (BCEL)。阅读该库的文档和示例程序,了解它们为您提供了哪些工具以及如何使用它们。

注意:您不能修改已经加载到类加载器和执行环境中的代码。Java 不允许。您可以做的是为该类生成新代码,设置一个类加载器,该类加载器了解该类需要使用新代码而不是先前加载的代码,从该特殊类加载器请求该类的新实例,然后工作之后的那个实例。请注意,对先前实例的任何引用仍将运行旧代码。

我认为,更详细地解释这一点超出了 StackOverflow 帖子的合理范围。再次,查看字节码操作工具的文档,研究它们的示例,并在遇到问题时向我们提出具体问题。

不要指望这很容易。除了极少数非常专业的例外,不要指望它是实用的。动态生成新代码有时是一个合理的想法,但自我修改代码总是一个坏主意。

祝你好运。

于 2014-03-07T22:16:09.747 回答