Если вы работаете с платформой ScriptEngine, это действительно просто. Вы можете «передать» объекты Java в JavaScript двумя способами:
- Вы можете "заполнить" среду выполнения для кода JavaScript и организовать, чтобы объекты Java просто "находились" в глобальном пространстве имен.
- Вы можете передавать объекты Java в качестве аргументов функциям JavaScript.
Вы также можете обращаться к Java-конструкторам из JavaScript и создавать экземпляры Java-объектов, если хотите.
Чтобы сделать первое, вам нужно настроить «привязки» для механизма сценариев. Это как карта:
final Bindings globals = engine.createBindings();
globals.put("foo", yourObject);
Теперь, когда код JavaScript запускается в этом движке, глобальный символ «foo» будет служить ссылкой на объект Java. Вы можете связать столько ссылок, сколько захотите.
Если вы хотите передать объект Java в качестве параметра функции JavaScript, первое, что вам нужно, это способ вызвать функцию JavaScript. Для этого вы используете метод invokeFunction или invokeMethod, предоставляемый интерфейсом Invocable:
final Object result = ((Invocable) engine).invokeMethod(context, methodName, arg, arg, ... );
«Контекст» - это просто ссылка на что-то, на что вы хотите this
сослаться в вызываемой функции. «MethodName» - это просто строка, дающая имя вашей глобальной функции JavaScript.
Java-классы доступны для среды JavaScript через их полные пути:
var javaHashMap = new java.util.HashMap();
Это даст вам экземпляр Java HashMap в качестве переменной JavaScript.