java - Java 中是否有与 Python 的 exec() 函数等效的函数?

标签 java eval

在python中,可以使用exec()来执行一段代码。

有什么方法可以在 Java 中执行此操作,以便我可以从字符串调用函数,但也可以执行其他操作,例如获取一些用户输入并将其作为 Java 代码运行。

注意:这与 Is there an eval() function in Java? 不同;这只会执行 eval() 而我想要 exec()

最佳答案

你有几个选择

1) 动态编译加载一个java类

How do you dynamically compile and load external java classes?

就像 Peter Lawrey 建议的那样,使用 net.openhft.compiler 你可以做你想做的事

https://github.com/OpenHFT/Java-Runtime-Compiler

// dynamically you can call
String className = "mypackage.MyClass";
String javaCode = "package mypackage;\n" +
                 "public class MyClass implements Runnable {\n" +
                 "    public void run() {\n" +
                 "System.out.println(\"Hello World\");\n" +
                 "     }\n" +
                 "}\n";
Class aClass = CompilerUtils.CACHED_COMPILER.loadFromJava(className, javaCode);
Runnable runner = (Runnable) aClass.newInstance();
runner.run();

我测试了这个解决方案,它运行良好。

观察:你需要添加项目的依赖 ${env.JAVA_HOME}/lib/tools.jar

2) 在 Java 中使用另一种语言来解释您的代码,例如使用 Jython:

String arbitraryPythonCode = "";
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec(arbitraryPythonCode);

您还可以使用 Javascript、Groovy、Scala 等。

关于java - Java 中是否有与 Python 的 exec() 函数等效的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35973921/

相关文章:

java - 使用 Jsoup 从输入中获取名称标签

Javascript:如何使用 eval 返回或解析对象文字?

perl - 我可以在 Perl 中的硬编码地址处调用子程序吗?

javascript - 如何以对象形式在eval中传递参数?

python - 如何通过另一个文件中定义的变量在文件中使用包含 eval 的函数?

node.js - 在 Node 服务器中使用 eval 是一个坏主意吗?

java - 加载屏幕 Libgdx Assetmanager

java - 在 Java 中对泛型列表进行排序?

java - 如何用java编写T.class?

java - 在 try catch block 之外使用变量 (Java)