像
String r = SomeThing.toExecString("new Object().toString()");
执行时r
的值为:
"new Object().toString() = java.lang.Object@c5e3974"
这甚至可能吗?它需要一堆反思吗?内置编译器可能吗?
答案 0 :(得分:2)
ScriptEngine engine = new ScriptEngineManager().getEngineByName("beanshell");
Object result = engine.eval("new Object().toString();");
System.out.println(result);
您可以使用BeanShell接近您想要的内容。我使用带有BeanShell 2.0b4的Java 6和类路径上基于JSR 223的bsh-engine.jar engine运行上面的代码。
答案 1 :(得分:1)
这里有一篇很棒的帖子: 生成静态代理类 - http://www.javaspecialists.eu/archive/Issue180.html
第一部分足以满足您的要求,我认为
答案 2 :(得分:0)
不知道你是否真的想要这个。但是你的问题可以通过这种方法解决:
String toExecString( String code ) {
return String.format(
"\"%s\" = %s@%x",
code,
code.getClass().getName(),
code.hashCode()
);
}