import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.util.function.Function;
import java.util.function.Consumer;

public class Main {

  public static void main(String[] args) throws Exception {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
    Main m = new Main();
    engine.getContext().setAttribute("hey", (Consumer<Function<Integer,Integer>>) m::hey, ScriptContext.ENGINE_SCOPE);
    engine.eval("function f(x) {return 42;} hey(f);", engine.getBindings(ScriptContext.ENGINE_SCOPE));
  }

  public String bar() {
    return "Hello World";
  }
  
  public void hey(Function<Integer, Integer> f) {}
}
