java eval_Java版的实现JavaScript中的eval()函数
时间: 2024-05-07 18:23:14 浏览: 168
Java 中没有类似于 JavaScript 中的 eval() 函数,但是可以通过使用 Java 的动态编译器来实现类似的功能。下面是一个简单的示例代码:
```java
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import java.lang.reflect.Method;
import java.util.Scanner;
public class EvalJava {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("> ");
String input = scanner.nextLine();
if (input.equals("exit")) {
break;
}
String result = evaluate(input);
System.out.println(result);
}
}
public static String evaluate(String code) throws Exception {
String className = "EvalTemp";
String methodName = "eval";
// 构造完整的 Java 代码
String fullCode = "public class " + className + " { public static Object "
+ methodName + "() { return " + code + "; } }";
// 编译 Java 代码
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null, "-d", ".", "-sourcepath", ".",
"-classpath", System.getProperty("java.class.path"),
className + ".java");
if (result != 0) {
return "Compile failed!";
}
// 加载编译后的类
Class<?> clazz = Class.forName(className);
Object instance = clazz.newInstance();
// 调用 eval() 方法,并返回结果
Method method = clazz.getMethod(methodName);
Object resultObject = method.invoke(instance);
return resultObject.toString();
}
}
```
这个示例代码中,我们通过读取用户输入的 Java 代码,动态编译生成一个临时类,然后加载该类并调用 eval() 方法。需要注意的是,代码中的 eval() 方法必须返回一个对象,并且我们需要将其转换为字符串以便输出。
阅读全文