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

时间:2011-08-22 05:01:04

标签: java

是否有一个java等价的python eval函数?

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

6 个答案:

答案 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

关闭代码