#javascript #java #nashorn #scriptengine
Вопрос:
Я использую ScriptEngine для запуска Javascript. В моем случае Javascript всегда будет возвращать логическое значение. Я думал, что eval() вернет объект, который я могу привести, но вместо этого он, похоже, возвращает a ScriptObjectMirror
. Функция toString() возвращает [Boolean true]
значение , поэтому оценка работает. Как я могу преобразовать или привести к логическому или логическому значению?
Вот мой код
final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine engine = manager.getEngineByName("javascript");
final Object jsEval = engine.eval(String.format("new Boolean(%s)", jsString));
System.out.printf("*** jsEval: %s %s%n ", jsEval, jsEval.getClass().getName());
Выход есть
*** jsEval: [Boolean true] jdk.nashorn.api.scripting.ScriptObjectMirror
Ответ №1:
Если вы точно знаете тип, вы можете использовать to
метод:
jsEval.to(Boolean.class)
Комментарии:
1. Спасибо. Люблю, когда это такое простое решение. Очевидно, мне нужно бросить в ScriptObjectMirror. Почему eval() возвращает объект вместо возврата ScriptObjectMirror или, по крайней мере, какого-либо интерфейса
2. Без понятия. Имейте в виду, что Nashorn устарел с Java-11 и удален с Java15.
3. К сожалению, я все еще на Java 8 :-(. Я предполагаю, что есть замена? Так как я использую
final ScriptEngine engine = manager.getEngineByName("javascript");
, я предполагаю, что он будет использовать любой рекомендуемый в настоящее время движок