是否有一个java等价的python eval函数?
这将是一个函数,它接受任意字符串并尝试在当前上下文中执行它。
答案 0 :(得分:2)
“是”和“否”。是的,因为可能。不,这是不是标准并且有许多限制。
请参阅BeanShell,它允许从Java进程中执行有限的Java。我从未试图将它用作库,也不能保证它的使用。
BeanShell是一个小型的,免费的,可嵌入的Java源代码解析器,具有用Java编写的对象脚本语言功能。 BeanShell动态执行标准Java语法,并使用常见的脚本编写方便性扩展它,例如松散类型,命令和方法闭包,如Perl和JavaScript中的那些。
然而,它比Python或其他动态语言中的eval
更具限制性/限制性。 (将JRuby,Jython,Groovy和Clojure视为在JVM上运行的一些动态对应物)。例如,周围代码中的本地Java变量名称都被编译掉,因此无法访问。
如果可能,我建议重新考虑这种方法; - )
快乐的编码。
答案 1 :(得分:2)
基于this Java Tip,如果您愿意使用com.sun.tools.javac.Main.compile(source)
,确实可以动态编译Java字符串。
com.sun.tools
中的类当然不是官方Java API的一部分。
在Java 6中,有一个编译器API可以提供对编译器的编程访问。请参阅the documentation for interface JavaCompiler。
任何标准API都不提供直接eval
,但存在构建您自己的API的工具。您可能在JVM"内部拥有" JVM;如果您尝试执行完全一般的评估,则会出现问题,因此最好限制您要执行的操作范围。
另请参阅:Is there an eval() function in Java?以获得一些好的评论和解释。
答案 2 :(得分:1)
如果您有权访问groovy,则可以始终使用Eval.me(String expression)
[api]。这将在当前上下文中执行您的Java(真正的groovy)代码。
答案 3 :(得分:0)
在Java中并不是那么简单。 Java是一种编译语言,为了“评估”某些代码,需要对其进行编译。 Python被解释,因此“eval”更简单。
答案 4 :(得分:0)
Java Scripting API可能是最接近JVM中执行字符串作为代码的标准方法。 Sun JVM开箱即用支持JavaScript,但不保证所有JVM实现都支持JavaScript。
答案 5 :(得分:-1)
您可能希望在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
关闭代码