@Deprecated(since="11", forRemoval=true)
模块 jdk.scripting.nashorn
Deprecated, for removal: This API element is subject to removal in a future version.
Nashorn JavaScript script engine and APIs, and the jjs tool are deprecated with the intent to remove them in a future release.
为ECMAScript 5.1中编写的程序提供Nashorn脚本引擎和运行时环境的实现。
Nashorn公开了一个名为
Nashorn是用ECMAScript 5.1编写的程序的运行时环境。
用法
使用Nashorn的推荐方法是使用javax.script
软件包中的JSR-223 "Scripting for the Java Platform" API。 通常,您将使用以下命令获取Nashorn的ScriptEngine
实例: import javax.script.*;...ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn");
然后像使用任何其他JSR-223脚本引擎一样使用它。 有关详细信息,请参见jdk.nashorn.api.scripting
包。 兼容性
Nashorn 100%符合ECMA-262 Standard, Edition 5.1 。 它需要一个实现JSR-292 "Supporting Dynamically Typed Languages on the Java Platform"规范的Java虚拟机(通常称为“invokedynamic”),以及已经提到的JSR-223。与Java平台的互操作性
除了作为100%ECMAScript 5.1运行时,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对象上的方法时,使用所有允许的ECMAScript转换将参数转换为Java方法的形式参数类型。 这可能是令人惊讶的,因为一般情况下,根据标准的第9.3节“ToNumber”等,从字符串到数字的转换将成功; string to boolean,number to boolean,Object to number,Object to string all work。 请注意,如果Java方法的声明参数类型为java.lang.Object
,则传递Nashorn对象时不进行任何转换; 特别是如果传递的JavaScript值是原始字符串类型,则只能依赖它是java.lang.CharSequence
,如果值是数字,则只能依赖它为java.lang.Number
。 如果声明的Java方法参数类型更具体(例如java.lang.String
或java.lang.Double
),那么Nashorn当然会确保传递所需的类型。 SAM类型
作为调用Java方法时的特殊扩展,可以传递ECMAScript函数对象来代替其Java类型为所谓的“单抽象方法”或“SAM”类型的参数。 虽然这个名称通常涵盖单方法接口,但Nashorn的功能更多,如果所有抽象方法都是同名的重载,它会将类型识别为SAM类型,并且它是一个接口,或者它是一个抽象带有无参数构造函数的类。 类型本身必须是公共的,而构造函数和方法可以是公共的或受保护的。 如果存在多个同名的抽象重载,则单个函数将作为所有这些的共享实现, 此外它还将覆盖任何同名的非抽象方法 。 这样做是为了与ECMAScript不具有重载方法的概念一致。 Java
对象
Nashorn公开了一个名为Java
的非标准全局对象,它是Java平台特定功能的主要API入口点。 您可以使用它来创建Java类的实例,从Java数组转换为本机数组并返回,等等。 其他非标准内置对象
除了Java
,犀牛也暴露了一些其他非标准内置对象: JSAdapter
, JavaImporter
, 包
-
-
包
输出 软件包 描述 jdk.nashorn.api.scripting 该软件包提供了javax.script
集成,这是使用Nashorn的首选方式。jdk.nashorn.api.tree Nashorn解析器API提供接口以将ECMAScript源代码表示为抽象语法树(AST)和解析器以解析ECMAScript源脚本。Indirect Exports From 包 java.scripting javax.script
-
Modules
Requires 变量 模块 描述 transitive java.scripting 定义Scripting API。
-
服务
提供者 Type 描述 ScriptEngineFactory
-