当前位置: 首页 > 科技观察

Java8Nashorn脚本引擎

时间:2023-03-13 01:20:48 科技观察

java8终于来了。函数式接口,lambda表达式期待已久。新武器在手,应该能玩出新花样。前两天无意中发现java8还带来了另一个有趣的东西。Nashorn是一个JavaScript引擎。这么好玩的东西不玩真是浪费。于是直接找到了oracle官方的介绍文档。老实说,文档真的很棒。这篇文章是我一边看Oracle官方文档,一边敲代码测试写的,算不上翻译文档,算是中文版总结文档。呵呵。原文地址:OracleNashorn:ANext-GenerationJavaScriptEnginefortheJVMjava7之前,JDK基于MozillaRhino构建了一个javascript脚本引擎。在java8中,基于JSR292和invokedynamic重新提供了一个新的javascript引擎——OracleNashorn。更符合ECMA标准的JavaScript规范,基于invokedynamic调用有更好的性能。文章使用最新的JDK8。所以如果你想使用它,你需要先安装它。★***栗子***第一个程序一定是HelloWorld。而且是命令行下的实现。因此,打开一个命令行。如果你的命令行配置好了,输入jjs回车就可以看到Nashrn的命令行是.print("hellohalu");人品好一定要看输出...../pickthenose下面可以使用第二个栗子命令行,赶快用js文件试试吧。把下面的代码保存在一个文件里,我的文件名称是halu.jsfunctionSayHi(){print("hellohalu");}SayHi();然后打开命令行,cd到文件所在目录。Windows有一个使用cd的技巧。按住shift,在文件夹空白位置右击鼠标,菜单中会出现打开命令窗口的选项。我不告诉普通人。在命令行中输入jjshalu.js可以看到执行结果在这里。第三要知道这是java8环境。请参见下面的示例。变种数据=[1,2,3,4,5,6,7,8,9,10];varfiltered=data.filter(function(i){returni%2==0;},0);print(filtered);varsumOfFiltered=filtered.reduce(function(acc,next){returnacc+next;},0);打印(sumOfFiltered);查看执行结果。这个例子的信息量很大。Nashorn只是使用了符合ECMA规范的javascript语言,并没有网上常用的对象。例如console、window等对象。第四个栗子命令行执行如下jjs-help,在帮助中可以看到。jjs可以运行javaFX程序脚本可以使用javascript严格模式。可以指定其他类路径。一个有趣的脚本模式脚本模式非常有趣,你可以使用jjs来运行用javascript编写的系统脚本。类似于python、ruby、bash脚本。脚本模式有两个扩展名:heredocs和shellinvocations.vardata={foo:"bar",time:newDate()};print(""+iterator.next());}第九个例子javascript实现了多个接口varObjectType=Java.type("java.lang.Object");varComparable=Java.type("java.lang.Comparable");varSerializable=Java.type("java.io.Serializable");varMyExtender=Java.extend(ObjectType,Comparable,Serializable);varinstance=newMyExtender({someInt:0,compareTo:function(other){varvalue=other[“someInt”];if(value===undefined){return1;}if(this.someInt