String abc = "看看";
String something = "System.out.println(abc);";
现在我要执行something里的代码,如何搞定?
大部分动态语言都可以 eval,但 java 不可以。
可以用JDK6里的[url=http://java.sun.com/javase/6/docs/api/javax/tools/package-summary.html]javax.tools[/url]包里的相关类,包括JavaCompiler等。如果你要执行的代码只是一些语句,那就把它扔到一个类里面去:
[code="java"]String templateFormat = "public class GeneratedClass {\npublic static void generatedMethod() {\n%s\n}\n}";
String code = String.format(templateFormat, something);[/code]
然后用JavaCompiler将其编译,用ClassLoader将编译出来的类加载,然后通过反射调用GeneratedClass.generatedMethod就行。
apache 的bcel包是做动态生成class的,
opensource的