是否有与python eval函数相当的java函数?

是否有与python eval函数相当的java函数?,java,Java,是否有与python eval函数相当的java函数 这将是一个函数,它接受任意字符串并尝试在当前上下文中执行它。在Java中没有那么简单。Java是一种编译语言,为了“评估”某些代码,需要对其进行编译。Python是被解释的,因此“eval”要简单得多。“是”和“否”。是的,这是可能的。不,因为它不是标准的,并且有很多限制 看看哪一个允许从一个进程(也就是Java)执行有限的Java。我从未尝试将其用作图书馆,也无法保证其用途 BeanShell是一个小型的、免费的、可嵌入的Java源代码解释

是否有与python eval函数相当的java函数


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

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

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

看看哪一个允许从一个进程(也就是Java)执行有限的Java。我从未尝试将其用作图书馆,也无法保证其用途

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

然而,它比Python或另一种动态语言中的say
eval
要严格得多。(将JRuby、Jython、Groovy和Clojure视为在JVM上运行的一些动态对应项)。例如,周围代码中的本地Java变量名都被编译掉了,因此无法访问

如果可能的话,我建议重新考虑该方法;-)


愉快的编码。

如果您可以访问groovy,您可以始终使用
Eval.me(字符串表达式)
[]。这将在当前上下文中执行Java(真正的groovy)代码。

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

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

在Java6中,有一个编译器API来提供对编译器的编程访问。看

任何标准API都不提供直接的
eval
,但这些工具是用来构建自己的API的。如果您尝试进行完全通用的评估,可能会出现“JVM内部JVM”问题,因此最好限制您想要做的事情的范围


另请参阅:获得一些好的注释和解释。

可能是最接近于在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

No关闭代码。Java都是预编译的,所以在运行时上下文甚至不存在。您有什么要实现的吗?有时候,如果你给我们更多的上下文,事情会变得更容易。这对你有用吗?也许你可以把这个大例子总结成一个简单的函数。但是它使用了一个非标准的类。@Ray:根据其他答案,我认为你的评论也应该是一个答案。Gabe,你知道,因为我从来没有在课堂上讲授过计算机科学,我从来都不明白编译语言不会有上下文。但有时仍然使用上下文的概念(比如Android应用程序上下文),但我猜它只是指某种“父对象”,而不是真正的上下文。这也是编译语言速度更快的原因,因为它们不需要维护上下文吗?+1对于BeanShell。我不建议使用它来完成系统中的功能(核心)需求功能,但我已经在web应用程序中多次使用它作为运行时诊断工具。pst我认为你是对的,做这种事情不会使我遇到的问题变得更容易。