@Deprecated(since="11", forRemoval=true)
Модуль jdk.scripting.nashorn
Предоставляет реализацию движка сценариев Nashorn и среду выполнения для программ, написанных на ECMAScript 5.1.
Nashorn — это среда выполнения для программ, написанных на ECMAScript 5.1.
Использование
The recommended way to use Nashorn is through the JSR-223 "Scripting for the Java Platform" APIs found in thejavax.script package. Usually, you'll obtain a ScriptEngine instance for Nashorn using: import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn"); and then use it just as you would any other JSR-223 script engine. See jdk.nashorn.api.scripting package for details.
Совместимость
Nashorn полностью соответствует стандарту ECMA-262, издание 5.1. Он требует виртуальную машину Java, которая реализует спецификацию JSR-292 "Поддержка динамически типизированных языков в Java Platform" (часто упоминается как "invokedynamic"), а также уже упомянутый JSR-223.Взаимодействие с платформой Java
Помимо того, что это среда выполнения ECMAScript 5.1 на 100%, Nashorn предоставляет возможности взаимодействия программ ECMAScript с платформой Java. В общем случае любой объект Java, помещённый в контекст движка сценариев, будет виден из сценария. С точки зрения стандарта, такие объекты Java не считаются "нативными объектами", а скорее "объектами хоста", как определено в разделе 4.3.8. Это различие позволяет определённые семантические различия в обращении с ними по сравнению с нативными объектами. Для большинства целей объекты Java ведут себя так же, как и нативные объекты: вы можете вызывать их методы, получать и устанавливать их свойства. Однако в большинстве случаев вы не можете добавлять произвольные свойства к ним, а также не можете удалять существующие свойства.Обработка коллекций Java
Нативные массивы Java иList поддерживают индексированный доступ к своим элементам через свойственные аксессоры, а Map поддерживают доступ к свойствам и элементам как через точку, так и через квадратные скобки. Разница состоит в том, что оператор точки имеет приоритет над свойствами объектов (их полями и свойствами, определёнными как getXxx и setXxx методы), в то время как оператор квадратных скобок имеет приоритет над элементами карты. Нативные массивы Java экспонируют свойство length.
Примитивные типы ECMAScript
Примитивные типы ECMAScript для чисел, строк и булевых значений представлены объектамиNumber, CharSequence и Boolean. Хотя чаще всего используется тип числа Double и тип строки String, не полагайтесь на это, так как различные внутренние оптимизации приводят к использованию других подклассов Number и внутренних реализаций CharSequence.
Преобразования типов
При вызове метода объекта Java аргументы преобразуются в формальные типы параметров Java-метода с использованием всех разрешённых преобразований ECMAScript. Это может быть неожиданно, так как в общем случае преобразования из строки в число будут успешными в соответствии с разделом 9.3 стандарта "ToNumber" и так далее; преобразования строки в булево, числа в булево, объекта в число, объекта в строку все работают. Обратите внимание, что если объявленный тип параметра Java-метода являетсяjava.lang.Object, объекты Nashorn передаются без каких-либо преобразований. Если значение JavaScript, которое передаётся, имеет примитивный строковый тип, вы можете полагаться только на то, что это java.lang.CharSequence, а если значение является числом, вы можете полагаться только на то, что это java.lang.Number. Если объявленный тип параметра Java-метода более специфичен (например, java.lang.String или java.lang.Double), то Nashorn, конечно же, обеспечит передачу требуемого типа.
Типы SAM
В качестве специального расширения при вызове Java-методов объекты функций ECMAScript могут передаваться вместо аргумента, тип которого является так называемым типом "single abstract method" или "SAM". Хотя это имя обычно охватывает интерфейсы с единственным методом, Nashorn немного более универсален, и он распознаёт тип как тип SAM, если все его абстрактные методы являются перегрузками одного и того же имени, и это либо интерфейс, либо абстрактный класс с конструктором без аргументов. Сам тип должен быть публичным, а конструктор и методы могут быть либо публичными, либо защищёнными. Если существуют несколько абстрактных перегрузок одного и того же имени, единственная функция будет использоваться как общая реализация для всех них, и дополнительно она также будет переопределять любые неабстрактные методы с тем же именем. Это делается для соответствия тому факту, что ECMAScript не имеет понятия перегруженных методов.Объект Java
Nashorn экспонирует нестандартный глобальный объект под именем Java, который является основной точкой входа в платформенно-специфичный функционал Java. Вы можете использовать его для создания экземпляров Java-классов, преобразования массивов Java в нативные массивы и обратно, и так далее.
Другие нестандартные встроенные объекты
В дополнение кJava, Nashorn также экспонирует некоторые другие нестандартные встроенные объекты: JSAdapter, JavaImporter, Packages
- Граф модулей:
- С момента:
- 9
Пакеты
| Пакет | Описание |
|---|---|
| jdk.nashorn.api.scripting | Этот пакет предоставляет интеграцию |
| jdk.nashorn.api.tree | API-интерфейсы парсера Nashorn обеспечивают возможность представления исходного кода ECMAScript в виде абстрактных синтаксических деревьев (AST) и парсер для анализа исходных сценариев ECMAScript. |
| От | Пакеты |
|---|---|
| java.scripting | javax.script |
Модули
| Модификатор | Модуль | Описание |
|---|---|---|
| transitive | java.scripting | Определяет API-интерфейс скриптирования. |
Сервисы
| Тип | Описание |
|---|---|
| ScriptEngineFactory |
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/jdk.scripting.nashorn/module-summary.html