是否可以在运行时从String执行代码?

时间:2018-06-12 16:04:36

标签: java

我一直在尝试使用Java中的Dungeons and Dragons战斗模拟器的一小部分。这主要是为了让我能够测试我的新知识,而我鼓励自己学习的一种方法就是推动我已经知道的事情。因此我的问题是:有没有办法在运行时执行用户输入的代码?一个例子 -

在遭遇期间,用户在“行为”字符串数组中添加额外的行(最有可能通过扫描程序)。他们补充说:

 "for(Monster m : Room) if(m.getHP()>10) adventurer.attack(m);"

在'turn'期间,程序遍历'Behavior'中的每个String,执行上面的代码行。

这样的事情可能吗?如果不是,我应该在哪里看?

3 个答案:

答案 0 :(得分:1)

是的,这是可能的。事实上,我们可以通过编程来完成所有工作。

您可以将BeanShell用于此目的。

答案 1 :(得分:0)

这可以使用JavaCompiler接口部分完成。它需要编译文件中的整个类定义。字符串作为代码是不可能的。

Java附带了可以在运行时执行代码的JavaScript引擎。

答案 2 :(得分:0)

您可以使用Nashorn引擎,它允许您在运行时执行JS脚本,因为Nashorn共享JVM,您可以从那里访问某些对象。