是否有java等效的python eval函数?

是否有java等效的python eval函数?

这将是一个函数,它接受任意字符串并尝试在当前上下文中执行它。

基于此Java提示 ,如果您愿意使用com.sun.tools.javac.Main.compile(source) ,则可以动态编译Java字符串。

com.sun.tools中的类当然不是官方Java API的一部分。

在Java 6中,有一个编译器API,用于提供对编译器的编程访问。 请参阅JavaCompiler接口的文档 。

任何标准API都不提供直接eval ,但是存在构建您自己的API的工具。 如果您尝试执行完全通用的eval,则可能会出现“JVM内部JVM”问题,因此最好限制您要执行的操作的范围。

另请参阅: Java中是否有eval()函数? 一些好的评论和解释。

“是”和“否”。 是的,因为它是可能的 。 不,它不是标准的,并且有许多限制。

请参阅BeanShell ,它允许从Java进程中执行有限的Java。 我从未试图将它用作库,也不能保证它的使用。

BeanShell是一个小型,免费, 可嵌入的Java源代码解释器 ,具有用Java编写的对象脚本语言function。 BeanShell动态执行标准Java语法,并使用常见的脚本编写方便性扩展它,例如松散类型,命令和方法闭包,如Perl和JavaScript中的那些。

然而,它比Python或其他动态语言中的eval更具限制性/限制性。 (将JRuby,Jython,Groovy和Clojure视为在JVM上运行的一些动态对应物)。 例如,周围代码中的本地Java变量名称都被编译掉,因此无法访问。

如果可能,我建议重新考虑这种方法;-)

快乐的编码。

如果你有权访问groovy,你总是可以使用Eval.me(String expression) [ api ]。 这将在当前上下文中执行您的Java(真正的groovy)代码。

在Java中并不是那么简单。 Java是一种编译语言,为了“评估”某些代码,需要对其进行编译。 Python被解释,因此“eval”更简单。

Java Scripting API可能最接近于在JVM中执行字符串作为代码的标准方法。 Sun JVM开箱即用支持JavaScript,但并不保证所有JVM实现都支持JavaScript。

您可能希望在Java程序执行的工作流程中执行DOS或unix命令…

 String command = "cmd /c dir /s"; String homeDir = "C:\\WINDOWS"; Process process = Runtime.getRuntime().exec(command + " " + homeDir); 

也许你想处理输出……

 final InputStream in = process.getInputStream(); int ch; while((ch = in.read()) != -1) { System.out.print((char)ch); } 

用try,catch来关闭代码