Java 8 Nashorn JavaScript
Nuevas características de Java 8
Nashorn es un motor de JavaScript.
El motor Nashorn JavaScript ya no está disponible en Java 15.
Esto ya se ha marcado en Java 11 como:
@deprecated (forRemoval = true)
Desde JDK 1.8, Nashorn reemplaza a Rhino (JDK 1.6, JDK 1.7) como el motor de JavaScript integrado de Java. Nashorn es totalmente compatible con la especificación ECMAScript 5.1 y algunas extensiones. Utiliza nuevas características de lenguaje basadas en JSR 292, incluido invokedynamic introducido en JDK 7, para compilar JavaScript en bytecode de Java.
En comparación con la implementación anterior de Rhino, esto aporta una mejora de rendimiento de 2 a 10 veces.
jjs
jjs es una herramienta de línea de comandos basada en el motor Nashorn. Acepta código fuente de JavaScript como argumentos y ejecuta ese código fuente.
Por ejemplo, creamos un archivo sample.js con el siguiente contenido:
print('Hello World!');
Abre la consola y escribe el siguiente comando:
$ jjs sample.js
La salida del programa anterior es:
Hello World!
jjs programación interactiva
Abre la consola y escribe el siguiente comando:
$ jjs
jjs> print("Hello, World!")
Hello, World!
jjs> quit()
>>
Pasar parámetros
Abre la consola y escribe el siguiente comando:
$ jjs -- a b c
jjs> print('字母: ' +arguments.join(", "))
字母: a, b, c
jjs>
Invocar JavaScript en Java
Usando ScriptEngineManager, el código JavaScript se puede ejecutar en Java. Ejemplo:
Archivo Java8Tester.java
Al ejecutar el script anterior, el resultado es:
$ javac Java8Tester.java $ java Java8Tester Ejemplo 12
Invocar Java en JavaScript
El siguiente ejemplo demuestra cómo hacer referencia a clases de Java en JavaScript:
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(568000000000000000023,13.9);
print(result);
Usamos el comando jjs para ejecutar el script anterior, y el resultado es el siguiente:
$ jjs sample.js 78952000000000002017.94
Otras extensiones