在JShell中,如何从字符串加载Java代码?

问题描述

我已经实现了一种生成Java代码方法

public static String generate() { ... }

它以String的形式返回Java代码,即我可能会得到

"public class X { public static String x() { return \"x\"; } }"

作为generate返回的值。现在,我处于JShell Tool (JEP-222)会话中,可以调用generate,但无法将 generate 的结果加载到JShell本身。

理想情况下,我想实现以下目标

jshell> eval(generate());
|  created class X

jshell> X.x();
$2 ==> "x"

在上述(假设的)JShell会话中,eval是我正在寻找的功能

我已经尝试过的可能解决方案:

  • 我知道可以通过调用JShell#eval来实现,但是我无法获得代表当前运行的JShell的JShell对象。
  • 可能是JShell中有一些功能可以将String提升到代码段。我找不到类似的东西,但是如果有的话,可能会有所帮助。
  • 我知道我可以/open一个文件,因此可以将String写入文件,然后打开/加载它。但是,这是一个两步过程,我希望有一个更简单的解决方案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)