扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Java实现字符串转换成可执行代码
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、雅安服务器托管、营销软件、网站建设、唐河网站维护、网站推广。
使用commons的jexl可实现将字符串变成可执行代码的功能,我写了一个类来封装这个功能:
import java.util.Map;
import org.apache.commons.jexl2.Expression;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;
/**
* 动态加载方法
*
*/
public class DyMethodUtil {
public static Object invokeMethod(String jexlExp,MapString,Object map){
JexlEngine jexl=new JexlEngine();
Expression e = jexl.createExpression(jexlExp);
JexlContext jc = new MapContext();
for(String key:map.keySet()){
jc.set(key, map.get(key));
}
if(null==e.evaluate(jc)){
return "";
}
return e.evaluate(jc);
}
}
调用
MapString,Object map=new HashMapString,Object();
map.put("testService",testService);
map.put("person",person);
String expression="testService.save(person)";
DyMethodUtil.invokeMethod(expression,map);
上代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入汉字:");
String input = sc.nextLine();
if (input.length() == 0) {
System.out.println("输入错误");
return;
}
System.out.println("汉字转unicode结果:");
char[] chars = input.toCharArray();
for (int i = 0; i chars.length; i++) {
String unicode = Integer.toHexString(chars[i]);
if (unicode.length() = 2) {
// 不足四位前面加0补齐
unicode = "00" + unicode;
}
unicode = "\\u" + unicode;
System.out.println(chars[i] + ": " + unicode);
}
}
}
方法是有的,但不全实际.
首先,你要理解,JAVA代码的运行是要被编译成字节码codebyte后才能被执行的,以你问题中的意思,那个字符串应该是在怎么代码被编译后项目在运行时,再传入的参数,这时,要想把传入参数的字符串当成JAVA代码来运行,只有一种办法,就是把传进来的字符串转换成字节码,并且,要虚拟加一个方法体出来.这也不是不可行,可用的技术有asm.cglib等字节码技术.但你想,对于你的问题.这样有实际的意义吗
你还不如,把system.out.print重定义成新的外调方法调动来的清晰
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流