Skip to content

Instantly share code, notes, and snippets.

@MisterErwin
Last active June 3, 2016 11:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MisterErwin/afb02ed9ab7f3e3ce39af3e82f10c3f0 to your computer and use it in GitHub Desktop.
Save MisterErwin/afb02ed9ab7f3e3ce39af3e82f10c3f0 to your computer and use it in GitHub Desktop.
Java 8 / Nashorn function passing class
import jdk.nashorn.api.scripting.NashornScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import javax.script.ScriptContext;
import java.util.function.Function;
public class Foo {
public static void main(String[] args) throws Exception{
System.out.println(System.getProperty("java.version"));
NashornScriptEngine engine = (NashornScriptEngine) new NashornScriptEngineFactory().getScriptEngine();
engine.setBindings(engine.createBindings(), ScriptContext.GLOBAL_SCOPE); //Null by default
engine.eval("function proxy(a){return Java.type('Foo').bar(a);}",engine.getBindings(ScriptContext.GLOBAL_SCOPE));
engine.eval("function withoutProxy(){return Java.type('Foo').bar(m);}",engine.getBindings(ScriptContext.ENGINE_SCOPE));
engine.eval("function withProxy(){return proxy(m);}", engine.getBindings(ScriptContext.ENGINE_SCOPE));
engine.eval("function m(a){return a;}", engine.getBindings(ScriptContext.ENGINE_SCOPE));
engine.invokeFunction("withoutProxy"); //Works
engine.invokeFunction("withProxy"); //ClassCastException
}
//Static method to call
public static void bar(Function f){
f.apply("-");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment