在javascript中eval()可以实现字符串转代码,java中需要使用动态编译。把获得的字符串写入一个临时文件中,然后编译它,在调用其中的函数。我们把要转换的字符串构造一个完整的类:如果方法是有返回值的.则:publicobjecteval(stringstr){//生成java文件strings="classtemp{";s+="objectrt(){"s+="myclassmc=newmyclass();"s+="returnmc."+str+"();";s+="}"s+="}";filef=newfile("temp.java");printwriterpw=newprintwriter(newfilewriter(f));pw.println(s);pw.close();//动态编译com.sun.tools.javac.mainjavac=newcom.sun.tools.javac.main();string[]cpargs=newstring[]{"-d","所在目录","temp.java"};intstatus=javac.compile(cpargs);if(status!=0){system.out.println("没有成功编译源文件!");returnnull;}//调用temp的rt方法返回结果:myclassloadermc=newmyclassloader();classclasz=mc.loadclass("test.class",true);methodrt=clasz.getmethod("rt",newclass[]{string[].class});returnrt.invoke(null,newobject[]{newstring[0]});//如果方法没有返回就直接调用}我们可以先写好多个重载的eval,有返回值和没有返回值的.以及可以传递参数的.这样我们就可以用字符串转换为java的语句来执行.
阅读全文 >