本文我们来介绍一下Java 8的Nashorn JavaScript引擎。Nashorn是于Java 8中用于取代Rhino(Java 6,Java 7)的JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。与先前的Rhino引擎相比,它有二到十倍的性能提升。本文中将使用各种各样的例子来说明Nashorn的强大功能。
jjs是个基于Nashorn引擎的命令行工具。你可以通过该工具快速地在Java上运行JavaScript代码,就像是一个REPL。
运行该程序将输出。
Nashorn支持从Java代码中直接调用定义在脚本中的JavaScript函数。你可以将Java对象作为函数参数传递,并且使用函数返回值调用Java方法。
为了调用函数,你首先需要将脚本引擎转换为接口。已经实现了接口,并且定义了方法来调用指定名称的JavaScript函数。
Java对象在传入时不会在JavaScript上损失任何类型信息。由于脚本在JVM上运行,我们可以在Nashron上使用Java API或外部库的全部类或方法。
为了理解在使用JavaScript原生类型调用Java方法时,Nashorn是如何处理类型转换的。我们将通过简单的例子来展示:
Nashorn虽然是面向ECMAScript 5.1实现的但它提供了一些扩展,使JavaScript能更好的运用。
数组就像真实的Java整数数组那样。但在试图向数组添加非整数时,Nashron执行了一些隐式的转换。字符串会自动转换为整数,这十分便利。
一般认为该函数是对的一个更好选择,因为它应该是在所有代码中设置对象原型的首选方法。
当使用重载参数调用方法时,传递可选参数类型会指定所调用的具体方法。
在JavaScript中访问被覆盖的成员通常比较困难,因为Java的super关键字在ECMAScript中并不存在。幸运的是,Nashron有一套补救措施。
首先我们需要在Java代码中定义超类:
我们通过Java.super()扩展调用了被覆盖的SuperRunner.run()方法。
这里我们定义了一个名为的对象,其中有一个名为的函数。使用这个范例我们可以达成基本的模块化。
在向Java传递原生JavaScript对象时,你可以使用类,它实际上是底层JavaScript对象的Java表示。实现了接口,其位于中。这个包中的类可以用于Java代码。
接口限制通过Nashorn运行的脚本对特定Java类的访问,为JavaScript代码对Java类的访问提供了细粒度的控制。示例代码如下:
最终这会抛出异常。
如果你对编写命令行(shell)脚本感兴趣,来试一试Nake吧。Nake是一个Java 8 Nashron的简化构建工具。你只需要在项目特定的中定义任务,之后通过在命令行键入来执行这些任务。任务编写为JavaScript,并且在Nashron的脚本模式下运行,所以你可以使用你的终端、JDK8 API和任意Java库的全部功能。
对Java开发者来说,编写命令行脚本是前所未有的简单…
本文部分内容来自:
https://wizardforcel.gitbooks.io/modern-java/content/ch3.html
https://docs.oracle.com/javase/10/nashorn/nashorn-java-api.htm
https://www.baeldung.com/java-nashorn
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/3508.html