可能表达得不清楚,举个例子吧。 String expression = "if(param>5) return 1;else return 0;";public int operate(){ int param = 10; //这里的语句是expression的值;这样,operate()将返回1 }
A strange requirement...
可以的. 用MVEL包,他相当于javascript中的eval
或者提取出完整的class,然后利用java.lang.Compiler
不可以将语句作为字符串传入,没有像 JavaScript 的 eval 函数的功能。目前版本的 JDK 这种功能无法实现,只能按照 2 楼所说的使用接口或抽象类什么的。只有等到下一个版本 JDK,即在使用 JDK 7 中的闭包可以实现类似的功能。public int operate({int => int} action) { int param = 10; return action.invoke(param); }int num = operate({int x => if(x > 5) 1; else 0;});
面向函数编程...Java支持了吗?
首先保证你的jdk版本1.6以上: ScriptEngineManager scriptEngineMgr = new ScriptEngineManager(); ScriptEngine jsEngine = scriptEngineMgr.getEngineByName("JavaScript"); if (jsEngine == null) { System.err.println("No script engine found for JavaScript"); System.exit(1); } engine.eval( "function sayHello(name) {" + " println('Hello, ' + name)" + "}" ); engine.eval("sayHello('World!')");World得部分可以用外界参数替代。 不过,由于对于jdk版本要求太高,就算是开发出来了,也不见得会有多大实用性
public interface A{ public int method(); } public static int operate(final int i,A a){ return a.method(); } public static void main(String[] args){ int ret = operatie(5,new A(){ //在这里实现A中的方法就可以 public int method(){}{ //下面就是你要写的字符窜 if(i>5) return 1;else return 0; } }); }
String expression = "if(param>5) return 1;else return 0;";public int operate(){
int param = 10;
//这里的语句是expression的值;这样,operate()将返回1
}
A strange requirement...
用MVEL包,他相当于javascript中的eval
int param = 10;
return action.invoke(param);
}int num = operate({int x => if(x > 5) 1; else 0;});
ScriptEngine jsEngine = scriptEngineMgr.getEngineByName("JavaScript"); if (jsEngine == null) {
System.err.println("No script engine found for JavaScript");
System.exit(1);
}
engine.eval(
"function sayHello(name) {" +
" println('Hello, ' + name)" +
"}"
);
engine.eval("sayHello('World!')");World得部分可以用外界参数替代。
不过,由于对于jdk版本要求太高,就算是开发出来了,也不见得会有多大实用性
public interface A{
public int method();
}
public static int operate(final int i,A a){
return a.method();
}
public static void main(String[] args){
int ret = operatie(5,new A(){
//在这里实现A中的方法就可以
public int method(){}{
//下面就是你要写的字符窜
if(i>5) return 1;else return 0;
}
});
}
import bsh.Interpreter;public class Test
{
public static void main(String args[])
{
Interpreter interpreter = new Interpreter();
String s = "System.out.println(\"hello\")";
try
{
interpreter.eval(s);
}
catch (Throwable t)
{
t.printStackTrace();
}
}
}
简单把
Interpreter interpreter = new Interpreter();
String s = "public class Hello {";
s += " public Hello() {System.out.println(\"Hello\");}";
s += "}";
try
{
interpreter.eval(s);
interpreter.eval("new Hello()");
}
catch (Throwable t)
{
t.printStackTrace();
}
还可以这样动态生成加载类