Pascal4eg

 Java | Фишки и трюки

Nashorn

public static void main(String[] args) throws ScriptException, NoSuchMethodException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    Invocable invocable = (Invocable) engine;
    engine.eval("var StringBuilder = Java.type('java.lang.StringBuilder')");
    engine.eval("var sb = new StringBuilder();");
    engine.eval("function add(str) { sb.append(str); }");
    engine.eval("function toString() { return sb.toString(); }");

    invocable.invokeFunction("add", "Hello");
    invocable.invokeFunction("add", " scripting!");
    System.out.println(invocable.invokeFunction("toString"));
    // Hello scripting!
}

Nashorn — это движок JavaScript, разработанный на языке программирования Java первоначально Oracle, а затем сообществом OpenJDK. Nashorn был включен в JDK в версии Java 8 и до Java 14. С Java 15 его нужно подключать явно.

Исполнение JavaScript кода внутри Java приложения может быть полезным по нескольким причинам:

👉 Расширяемость: Вы можете использовать JavaScript для динамического настраиваемого поведения вашего Java приложения. Это позволяет легко добавлять и изменять функциональность без необходимости перекомпилировать и пересобирать код Java.

👉 Переиспользование кода: Если у вас уже есть существующий JavaScript код, его можно легко интегрировать в Java приложение, чтобы не создавать аналогичную функциональность на Java.

👉 Использование библиотек: JavaScript имеет богатую экосистему библиотек и фреймворков, которые могут быть полезными для решения определенных задач. Вы можете использовать их внутри Java приложения, чтобы ускорить разработку и добавить новые возможности.

Из кода Java в JavaScript можно передать данные, а так же получить обратно. Так же в JavaScript можно использовать Java классы.

📌 Однако следует помнить, что интеграция JavaScript и Java может вызвать сложности с обработкой ошибок, безопасностью и отладкой. Также, перед использованием JavaScript в Java приложении, стоит оценить, действительно ли это необходимо, и рассмотреть альтернативные способы решения задачи.