是否有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来关闭代码