fork(1) download
  1. import javax.script.Invocable;
  2. import javax.script.ScriptContext;
  3. import javax.script.ScriptEngine;
  4. import javax.script.ScriptEngineManager;
  5. import java.util.function.Function;
  6. import java.util.function.Consumer;
  7.  
  8. public class Main {
  9.  
  10. public static void main(String[] args) throws Exception {
  11. ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
  12. Main m = new Main();
  13. engine.getContext().setAttribute("hey", (Consumer<Function<Integer,Integer>>) m::hey, ScriptContext.ENGINE_SCOPE);
  14. engine.eval("function f(x) {return 42;} hey(f);", engine.getBindings(ScriptContext.ENGINE_SCOPE));
  15. }
  16.  
  17. public String bar() {
  18. return "Hello World";
  19. }
  20.  
  21. public void hey(Function<Integer, Integer> f) {}
  22. }
  23.  
Runtime error #stdin #stdout #stderr 1.43s 84480KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Warning: Nashorn engine is planned to be removed from a future JDK release
Exception in thread "main" java.lang.ClassCastException: class jdk.nashorn.api.scripting.ScriptObjectMirror cannot be cast to class java.util.function.Function (jdk.nashorn.api.scripting.ScriptObjectMirror is in module jdk.scripting.nashorn of loader 'platform'; java.util.function.Function is in module java.base of loader 'bootstrap')
	at jdk.scripting.nashorn.scripts/jdk.nashorn.internal.scripts.Script$Recompilation$2$\^eval\_$cu1$restOf/0x000000080127dc40.:program(<eval>:1)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:655)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:513)
	at jdk.scripting.nashorn/jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:527)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:456)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:413)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:409)
	at jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:162)
	at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
	at Main.main(Main.java:14)