当前位置:首页 » 编程语言 » rhinojava

rhinojava

发布时间: 2023-04-04 04:55:35

‘壹’ rhino极地模式怎么出图

rhino极地模式出图方法:

打开rhino,在工具-选项-显示模式中,点击任意模式(以极地模式为例),点击复制,得到一个复制的极地模式。同时,点击“导出”可以将图片导出。

Rhino是美国Robert McNeel & Assoc开发的PC上强大的专业3D造型软件,它可以广泛地应用于三维动画制作、工业制造、科学研究以及机械设计等领域。

它能轻易整合3DS MAX与Softimage的模型功能部分,对要求精细、弹性与复杂的3D NURBS模型,有点石成金的效能。

能输出obj、DXF、IGES、STL、3dm等不同格式,并适用于几乎所有3D软件,尤其对增加整个3D工作团队的模型生产力有明显效果,故使用3D MAX、AutoCAD、MAYA、Softimage、Houdini、Lightwave等3D设计人员不可不学习使用。

Rhino,中文名称犀牛,是一款超强的三维建模工具。不过不要小瞧它,它包含了所有的NURBS建模功能,用它建模感觉非常流畅,所以大家经常用它来建模,然后导出高精度模型给其他三维软件使用。

Rhino软件简介:

Mozilla Rhino 是一个完全使用java语言编写的开源JavaScript引擎实现,主要用于在java环境中执行xxx.js 或者 js程序。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。

Rhino(犀牛)这个名字来源于O'Reilly出版的着名的“犀牛书”JavaScript: The Definitive Guide(中文译名:JavaScript指南)。



‘贰’ openjdk和jdk性能区别 有哪些区别

关于JDK和OpenJDK的区别,可以归纳为以下几点:

1、授权协议的不同:openjdk采用GPL V2协议放出,而JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。OpenJDK不包含Deployment(部署)功能部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在Openjdk中是找不到的。

2、OpenJDK源代码不完整。这个很容易想到,在采用GPL协议的Openjdk中,sun jdk的一部分源代码因为产权的问题无法开放openjdk使用,其中最主要的部份就是JMX中的可选元件SNMP部份山扰的代码。而Icedtea则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使OpenJDK更加完整。

3、部分源代码用开源代码替换。由于产权的问题,很多产权不是SUN的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用Free Type代替。

4、openjdk只包含最精简的JDK。OpenJDK不包含其他的软件包,比如Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

5、不能使用祥贺Java商标。这个很容易理解,在安装openjdk的机器上,输入谨唯派“java -version”显示的是openjdk,但是如果是使用Icedtea补丁的openjdk,显示的是java。(未验证)。

‘叁’ 运用java与javascript集合对象运用能力以及对字符串解析

Java用ScriptEngine解析脚本
javax.script,始于JDK1.6,不过现在只有sun实现的JavaScript的解析器,难道是因为主要用来解析js语法所以归类到JEE的范畴?不过基本足够了,一般的用途主要是能解析通用的表达式就好,比如X >= 1(X作为参数传入)这样的表达式,也能利用js的函数语法,创造一个就像Java的函数一样存在于内存中随时可以被调用的函数,更可以将js中的对象直接转换成java对象。
Script主要类及接口
ScriptEngineManager、ScriptEngine、CompiledScript和Bindings 4个类或接口
ScriptEngineManager是一个工厂的集合,可以通过name或tag的方式获取某个脚本的工厂并生成一个此脚本的ScriptEngine,目前只有javascript的工厂。通过工厂函数得到了ScriptEngine之后,就可以用这个对象来解析脚本字符串了,直接调用Object obj = ScriptEngine.eval(String script)即可,返回的obj为表达式的值,比如true、false或int值。
CompiledScript可以将ScriptEngine解析一段脚本的结果存起来,方便多次调用。只要将ScriptEngine用Compilable接口强制转换后,调用compile(String script)就返回了一个CompiledScript对象,要用的时候每次调用一下CompiledScript.eval()即可,一般适合用于js函数的使用。
Bindings的概念算稍微复杂点,我的理解Bindings是用来存放数据的容器。它有3个层级,为Global级、Engine级和Local级,前2者通过ScriptEngine.getBindings()获得,是唯一的对象,而Local Binding由ScriptEngine.createBindings()获得,很好理李好信解,每次都产生一个新的。Global对应到工厂,Engine对应到ScriptEngine,向这2者里面加入任何数据或者编译后的脚本执行对象,在每一份新生成的Local Binding里面都会存在。
ScriptEngine代码示例
先来看一段袜碧JS
var arrclass = new Array();
arrclass.push(new Class(20000,"计算机-软件开发"));
arrclass.push(new Class(30000,"计算机-网络/通讯"));
arrclass.push(new Class(10000,"计算机-硬件开发"));
arrclass.push(new Class(40000,"计算机-管理"));
arrclass.push(new Class(50000,"计算机-品质管理/技术支持"));
arrclass.push(new Class(320000,"电子/电器/半导体/仪器仪表"));

java代码实现解析
public void parseJS() {
//1、通过哪轮Http请求获取js的String数据,格式如上
String jsData = getJsData("url");
//2、观察js结构,自定义Class,push到数组中,java中需要定义跟js中的Class的声明
String clazz = "function Class(classId, className){ this.classId=classId;this.className=className};";

//3、初始化ScriptEngine
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
//4、js中未定义返回对象,这里需要将Class数据转换成字符串的数组返回,个人觉得很别扭,不知道是理解错误还是确实如此?
//如果不这样做则直接在js后加上arrclass,cScript.evel()则返回NativeObject对象的数组
String fun = "var result = new Array() ;for(var i=0;i <arrclass.length;i++){result.push(new Array(arrclass[i].classId,arrclass[i].className))}; result;";
Compilable compilable = (Compilable) engine;
//4、使用NativeArray获取数据
CompiledScript cScript;
try {
cScript = compilable.compile(clazz + jsData + fun);
NativeArray na = (NativeArray) cScript.eval();
for (int i = 0; i < na.getLength(); i++) {
NativeArray nv = (NativeArray) na.get(i, null);
System.out.println(nv.get(0, null).toString() + " " + nv.get(1, null).toString());
}
} catch (ScriptException ex) {
ex.printStackTrace();
}
}

java代码中执行js计算
public void js() {
// 创建脚本引擎管理器
ScriptEngineManager sem = new ScriptEngineManager();
// 创建一个处理JavaScript的脚本引擎
ScriptEngine engine = sem.getEngineByExtension("js");
try {
// 执行js公式
engine.eval("if(6>5){flag=true;}else{flag =false;}");
} catch (ScriptException ex) {
ex.printStackTrace();
}
//看看我们预期的反馈结果 true
System.out.println(engine.get("flag"));
}

Java解析JS另一大引擎-Rhino
Rhino是完全用Java编写的JavaScript的开放源代码实现。它通常是嵌入到Java应用程序提供给最终用户的脚本。它被镶嵌在J2SE6作为默认的Java脚本引擎。
使用Rhino来解析,感觉一切都很清晰明朗.
public void parseJS() {
//1、通过Http请求获取js的String数据,格式如上
String jsData = getJsData("url");
//2、定义跟js中的Class的声明
String clazz = "function Class(classId, className){ this.classId=classId;this.className=className};";
//3、初始化Context
Context cx = Context.enter();
Scriptable scope = cx.initStandardObjects();
Object result = cx.evaluateString(scope, clazz + jsData + ";arrclass", "arrclass", 1, null);
System.out.println(NativeJSON.stringify(cx, scope, result, null, null));
Context.exit();
}

‘肆’ Rhino 和 Nashorn 到底怎么运行

嗯这个问题得剥开几层说。其实很容易理解。这里我们先忽略JVM是用什么语言实现的。要详细考察这个问题可以去看另一个回答:Java 平台中的 JVM 和 .Net 平台下的 CLR 分别是用什么语言写的? - RednaxelaFX 的回答 ( 语法分析器 Parser ) -> [ 抽象语法树(AST) ast ] -> ( Rhino内部表现形式生成器 IRFactory ) -> [ Rhino内部表现形式 ScriptNode ] -> ( Rhino字节码生成器 CodeGenerator ) -> [ Rhino字节码 Icode ] -> ( Rhino解释器 Interpreter ) -> [ 运行结果 ]这里说的Rhino字节码是Rhino内部用来表示JavaScript程序语义的一套字节码,跟JVM所支持的Java字节码没关系。当优化级别为0~9时,Rhino使用一个用Java写的编译器将JavaScript编译为Java字节码;生成出来的Java字节码交由JVM直接执行。至于底下的JVM是解释执行Java字节码,还是将Java字节码编译为机器码再执行,Rhino并不关心。此时,Rhino的工作流程简单说是:[ JavaScript源码 ] -> ( 语法分析器 Parser ) -> [ 抽象语法树(AST) ast ] -> ( Rhino内部表现形式生成器 IRFactory ) -> [ Rhino内部表现形式 ScriptNode ] -> ( 可选优化 Optimizer ) -> ( Java字节码生成器 Codegen ) -> [ Java Class文件(包含Java字节码) ] -> JVM加载和执行生成的字节码 -> [ 运行结果 ]这种以编译的方式模式执行JavaScript,跟一个Java源码编译器(例如javac)把Java源码编译为Class文件然后交由JVM执行,过程是类似的。只不过Rhino做的优化不够多而且JavaScript的语义也远比Java动态,所以此时Rhino上运行JavaScript的性能仍然无法跟Java的性能比。顺带一提,Sun/Oracle JDK6 / OpenJDK6中自带的Rhino是经过裁剪的,去掉了Mozilla Rhino中的部分功能。其中一个被去掉的功能就是Rhino的编译模式。这意味着JDK6自带的Rhino只能用解释模式运行。而Oracle JDK7 / OpenJDK7放宽了这一限制,当有SecurityManager时只能用解释模式,否则可以配置"rhino.opt.level"系统属性来设置Rhino的优化级别;默认仍然是用解释模式(优化级别默认为-1)。pile()开始看:[ JavaScript源码 ] -> ( 语法分析器 Parser ) -> [ 抽象语法树(AST) ir ] -> ( 编译优化 Compiler ) -> [ 优化后的AST + Java Class文件(包含Java字节码) ] -> JVM加载和执行生成的字节码 -> [ 运行结果 ]中间这个“编译优化”通过CompilationPhase来组织。最基本的工作流程可以从Compiler.CompilationPhases.COMPILE_ALL来看。它包含一系列CompilationPhase:CONSTANT_FOLDING_PHASELOWERING_PHASETRANSFORM_BUILTINS_PHASESPLITTING_PHASEPROGRAM_POINT_PHASESERIALIZE_SPLIT_PHASESYMBOL_ASSIGNMENT_PHASESCOPE_DEPTH_COMPUTATION_PHASEOPTIMISTIC_TYPE_ASSIGNMENT_PHASELOCAL_VARIABLE_TYPE_CALCULATION_PHASEBYTECODE_GENERATION_PHASEINSTALL_PHASE我在ADC2013做过一次关于Nashorn的演讲:博客收集帖Rhino 和 Nashorn 到底怎么运行

‘伍’ 为什么浏览器可以保存网页中js动态内容,用java编写的爬虫却无法抓取

爬虫最多只能抓取页面加载完毕时的内容,怎么可能慢慢等你网页后续动态显示出来的内容呢

‘陆’ java未来发展趋势

虽然只有10岁,却犹如35岁的青壮年一般,Java已经迅速地在众多领域确立了其地位:对等网络、开放源代码、无线开发和嵌入式应用程序等等,这还只是其中一些。要准确地把握这门语言的走向是很困难的,因为它正在同时向各个方向齐头并进。

关于快速开发的一切

毫无疑问:脚本编写语言,例如Jython、Python、Perl和PHP,正在被越来越多地使用。Jython事实上就是Python编程语言的完整实现。它100%使用纯Java编写而成,并允许对Java库的轻松访问

这种脚本编写的趋势在很大程度上是由快速应用程序开发(RAD)推动的,这是一种始终都能够赢得追随者的开发风格。由于市场营销的执行者逼迫IT的生产公司加速产品的开发,因此IT的管理者被迫寻找最有效的方式来满足最终期限的要求。在这里RAD是主要的源动力。

“你可能很擅长某些脚本语言,并且能够完成常规Java所不能完成的任务,”Mukund Balasubramanian说。他是位于加利福尼亚州雷德伍德城的Infravio的首席技术官,负责着Java和Web服务的集成。“如果你知道如何使用一门优秀的语言,你就可以在开发中省下很多的时间和金钱。”

脚本语言的优势

Balasubramanian说,脚本语言具有下列优势:

快速开发:脚本语言极大地简化了“开发、部署、测试和调试”的周期过程。
容易部署:大多数脚本语言都能够随时部署,而不需要耗时的编译/打包过程。
同已有技术的集成:脚本语言被Java或者COM这样的组件技术所包围,因此能够有效地利用代码。
易学易用:很多脚本语言的技术要求通常要低一些,因此能够更容易地找到大量合适的技术人员。
动态代码:脚本语言的代码能够被实时生成和执行,这是一项高级特性,在某些应用程序里(例如JavaScript里的动态类型)是很有用也是必需的。
脚本语言的劣势

但是,Java脚本语言有下面这些劣势:

脚本语言不够全面。它们会要求一门“真正的”编程语言的存在;例如,你必须找一个数据库驱动程序将其内置进脚本语言里。
脚本语言并不是软件工程和构建代码结构的最佳选择,例如面向对象和基于组件的开发。
脚本语言通常不是“通用”语言,但是能够根据专门的应用来调整,例如PHP和万维网。

“因此,脚本语言能够在很大程度上加速软件的开发,但是必须要根据具体的应用来仔细选择——例如动态Web页面,或者对‘真正的’编程语言进行补充,就像Jython是对Java的补充一样,”Balasubramanian说。

像IBM的Bean脚本编写框架(Bean Scripting Framework)这样的工具使得将Tcl、Python、Perl和其他脚本语言融合进Java应用程序变得相当容易。Sun、Borland、BEA和其他的公司也提供了类似的工具。但是俄勒冈州威尔逊维尔的Mentor Graphics的资深Java开发人员David Kearns指出,支持一门脚本语言就存在耗时和耗钱的风险,不要说支持六门语言了。

在其最近为Java世界所撰写的一篇文章中,Kearns描述了在你Java应用程序里支持脚本语言所固有的风险。

“在我看来,Jython具有最快的脚本解释器,并有一些强大的编程特性,”他说。“我唯一真正关心的是Jython的控制流句法(control-flow syntax),这可能对你来说很重要,也可能不重要。对于Jacl而言,编写用于Jython的脚本的学习曲线可能要比JavaScript或者BeanShell高,(即学习前者要比学习后两者困难),因为有更多的新东西要学习。如果你想要在Python里编写不同寻常的脚本,那么我推荐你去买本书看看。Python是一门很常见的编程语言,所以你在书店里会有很多的选择。

其他Java脚本语言

下面列举出了一些使用最广泛的面向Java的脚本语言,感谢Java老手——About.com的William Wagers提供这些内容:

Beanshell
BeanShell是一个简短的、免费的、可下载的、可嵌入的Java源代码解释器,它具有使用Java编写成的对象脚本语言的特性。除了普通的脚本命令和句法之外,BeanShell还能够执行标准的Java陈述式和表达式。它能够将脚本对象作为简单的方法闭塞(method closure)来支持,就像Perl和JavaScript里的一样。

Jess
Jess是一个完全使用Java语言编写的规则引擎(rule engine)和脚本环境。Jess最初的灵感来自CLIPS专家系统,但是现在它已经发展成为一个完整的、卓越的动态环境。使用Jess,你能够创建Java applet以及应用程序,并让这些程序根据以说明规则(declarative rule)的形式所提供的信息进行“推理”。

JudoScript
JudoScript是一个Java类的脚本,它具有很多特性:HTTP客户端和服务器编程、文件系统和归档、XML和XSLT脚本编写、JDBC脚本编写,以及HTML修饰能力(scraping)。它还有值得炫耀的带有监控程序的调度程序、sendmail、运行可执行(run executable)、Java GUI的创建、FTP、SSH和SCP,以及Windows注册表等等。这个软件可下载,包括源代码,都是免费的。

Rhino
Rhino使用纯Java编写而成,是一个开放源代码的JavaScript的实现。它通常被嵌入到Java应用程序里,用来向终端用户提供脚本编写的能力。

‘柒’ rhino什么时候学

rhino一款软件的学习时间是2~3个月
前提是能够系统的接受学习的情况下,如果选择自学的陆蔽话除非有强大的自控力,能够自我监督完成各旁行项学习与练习,那么自学的方式也是可以接受运悉哗的。

‘捌’ rhino是不是比不过google V8

v8是直接编译,主要是通过c++编写的解释器执行
rhino是基于java runtime之上开发的

语言这玩意,谁离内核最近,谁的效率就越高,所以rhino是比不上v8

但是LZ,mozilla做的Gecko又比谷歌的webkit效率高(具体楼主可以同机不同浏览器看渲染实测,明显的同一个程序webkit会掉帧,在mac上的safari不做参考,那是高度定制的渲染内核了)

‘玖’ java,javascript,groovy和Rhino 的运行效率到底相差的有多远

您好,很高兴为您解答。

看下这个测试:http://blog.csdn.net/emu/article/details/424301

如若满意,请点击右侧【御判迟采纳答案】,如若还有问题,请镇李点击【冲敏追问】

希望我的回答对您有所帮助,望采纳!

~ O(∩_∩)O~

‘拾’ java nashorm怎么用

从JDK 6开始,Java就已经捆绑了JavaScript引擎,该引擎基于Mozilla的Rhino。该特性允许开发人员将JavaScript代码嵌入到Java中,甚至从嵌入的JavaScript中调用Java。此外,它还提供了使用jrunscript从命令行运行JavaScript的能力。如果不需要非常好的性能,并且可以接受ECMAScript 3有限的功能集的话,那它相当不错了。
从JDK 8开始,Nashorn取代Rhino成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR 292的新语言特性,其中包含在JDK 7中引入的invokedynamic,将JavaScript编译成Java字节码。
与先前的Rhino实现相比,这带来了2到10倍的性能提升,虽然它仍然比Chrome和Node.js中的V8引擎要差一些。如果你对实现细节感兴趣,那么可以看看这些来自2013 JVM语言峰会的幻灯片。
相关厂商内容
滴滴出行iOS客户端架构演进之路!
微信客户端如何应对弱网络!
函数式编程中的Swift与Swift中的函数式编程!
AWS Webinar 5月24日在线课堂|利用AWS Lambda创建应用
国际范 最前沿 不容错过的容器技术盛会
相关赞助商

GMTC全球移动技术大会2016年6月24日-25日,北京,点击了解详情!
由于Nashorn随JDK 8而来,它还增加了简洁的函数式接口支持。接下来,我们很快就会看到更多细节。
让我们从一个小例子开始。首先,你可能需要安装JDK 8和NetBeans、IntelliJ IDEA或者Eclipse。对于集成JavaScript开发,它们都至少提供了基本的支持。让我们创建一个简单的Java项目,其中包含下面两个示例文件,并运行它:
(点击图片可以查看大图)

在第12行,我们使用引擎的“eval”方法对任意JavaScript代码求值。在本示例中,我们只是加载了上面的JavaScript文件并对其求值。你可能会发现那个“print”并不熟悉。它不是JavaScript的内建函数,而是Nashorn提供的,它还提供了其它方便的、在脚本环境中大有用武之地的函数。你也可以将 “hello world”的打印代码直接嵌入到传递给“eval”方法的字符串,但将JavaScript放在它自己的文件中为其开启了全新的工具世界。
Eclipse目前还没有对Nashorn提供专门的支持,不过,通过JavaScript开发工具(JSDT)项目,它已经支持JavaScript的基本工具和编辑。
(点击图片可以查看大图)

IntelliJ IDEA 13.1(社区版和旗舰版)提供了出色的JavaScript和Nashorn支持。它有一个全功能的调试器,甚至允许在Java和JavaScript之间保持重构同步,因此举例来说,如果你重命名一个被JavaScript引用的Java类,或者重命名一个用于Java源代码中的JavaScript文件,那么该IDE将跨语言修改相应的引用。
下面是一个例子,展示如何调试从Java调用的JavaScript(请注意,NetBeans也提供了JavaScript调试器,如下截图所示):
(点击图片可以查看大图)

你可能会说,工具看上去不错,而且新实现修复了性能以及一致性问题,但我为什么应该用它呢?一个原因是一般的脚本编写。有时候,能够直接插入任何类型的字符串,并任由它被解释,会很方便。有时候,没有碍事的编译器,或者不用为静态类型担心,可能也是不错的。或者,你可能对Node.js编程模型感兴趣,它也可以和Java一起使用,在本文的末尾我们会看到。另外,还有个情况不得不提一下,与Java相比,使用JavaScript进行JavaFX开发会快很多。
Shell脚本
Nashorn引擎可以使用jjs命令从命令行调用。你可以不带任何参数调用它,这会将你带入一个交互模式,或者你可以传递一个希望执行的JavaScript文件名,或者你可以用它作为shell脚本的替代,像这样:
#!/usr/bin/env jjs

var name = $ARG[0];
print(name ? "Hello, ${name}!" : "Hello, world!");

向jjs传递程序参数,需要加“—”前缀。因此举例来说,你可以这样调用:
./hello-script.js – Joe

如果没有“—”前缀,参数会被解释为文件名。
向Java传递数据或者从Java传出数据
正如上文所说的那样,你可以从Java代码直接调用JavaScript;只需获取一个引擎对象并调用它的“eval”方法。你可以将数据作为字符串显式传递……
ScriptEngineManager scriptEngineManager =
new ScriptEngineManager();
ScriptEngine nashorn =
scriptEngineManager.getEngineByName("nashorn");
String name = "Olli";
nashorn.eval("print('" + name + "')");

……或者你可以在Java中传递绑定,它们是可以从JavaScript引擎内部访问的全局变量:
int valueIn = 10;
SimpleBindings simpleBindings = new SimpleBindings();
simpleBindings.put("globalValue", valueIn);
nashorn.eval("print (globalValue)", simpleBindings);

JavaScript eval的求值结果将会从引擎的“eval”方法返回:
Integer result = (Integer) nashorn.eval("1 + 2");
assert(result == 3);

在Nashorn中使用Java类
前面已经提到,Nashorn最强大的功能之一源于在JavaScript中调用Java类。你不仅能够访问类并创建实例,你还可以继承他们,调用他们的静态方法,几乎可以做任何你能在Java中做的事。
作为一个例子,让我们看下来龙去脉。JavaScript没有任何语言特性是面向并发的,所有常见的运行时环境都是单线程的,或者至少没有任何共享状态。有趣的是,在Nashorn环境中,JavaScript确实可以并发运行,并且有共享状态,就像在Java中一样:
// 访问Java类Thread
var Thread = Java.type("java.lang.Thread");

// 带有run方法的子类
var MyThread = Java.extend(Thread, {
run: function() {
print("Run in separate thread");
}
});
var th = new MyThread();
th.start();
th.join();

请注意,从Nashorn访问类的规范做法是使用Java.type,并且可以使用Java.extend扩展一个类。
令人高兴的函数式
从各方面来说,随着JDK 8的发布,Java——至少在某种程度上——已经变成一种函数式语言。开发人员可以在集合上使用高阶函数,比如,遍历所有的元素。高阶函数是把另一个函数当作参数的函数,它可以用这个函数参数做些有意义的事情。请看下面Java中高阶函数的示例:
List<Integer> list = Arrays.asList(3, 4, 1, 2);
list.forEach(new Consumer() {

@Override
public void accept(Object o) {
System.out.println(o);
}
});

对于这个例子,我们的传统实现方式是使用一个“外部”循环遍历元素,但现在,我们没有那样做,而是将一个“Consumer”函数传递给了“forEach”操作,一个高阶的“内部循环”操作会将集合中的每个元素一个一个地传递给Consumer的“accept”方法并执行它。
如上所述,对于这样的高阶函数,函数式语言的做法是接收一个函数参数,而不是一个对象。虽然在传统上讲,传递函数引用本身超出了Java的范围,但现在,JDK 8有一些语法糖,使它可以使用Lambda表达式(又称为“闭包”)来实现那种表示方式。例如:
List<Integer> list = Arrays.asList(3, 4, 1, 2);
list.forEach(el -> System.out.println(el));

在这种情况下,“forEach”的参数是这样一个函数引用的形式。这是可行的,因为Customer是一个函数式接口(有时称为“单一抽象方法(Single Abstract Method)”类型或“SAM”)。
那么,我们为什么要在讨论Nashorn时谈论Lambda表达式呢?因为在JavaScript中,开发人员也可以这样编写代码,而在这种情况下,Nashorn可以特别好地缩小Java和JavaScript之间的差距。尤其是,它甚至允许开发人员将纯JavaScript函数作为函数式接口(SAM类型)的实现来传递。
让我们来看一些纯JavaScript代码,它们与上述Java代码实现一样的功能。注意,在JavaScript中没有内置的列表类型,只有数组;不过这些数组的大小是动态分配的,而且有与Java列表类似的方法。因此,在这个例子中,我们调用一个JavaScript数组的“for Each”方法:
var jsArray = [4,1,3,2];
jsArray.forEach(function(el) { print(el) } );

热点内容
早期存储卡 发布:2024-11-02 14:26:50 浏览:988
配音秀缓存在手机哪里 发布:2024-11-02 14:23:27 浏览:294
linux下载gcc 发布:2024-11-02 14:13:47 浏览:344
写算法交易 发布:2024-11-02 13:57:09 浏览:208
安卓怎么下载鸿蒙 发布:2024-11-02 13:36:13 浏览:663
加密狗rsa 发布:2024-11-02 13:20:44 浏览:560
实用java教程 发布:2024-11-02 13:07:39 浏览:930
ide文件夹 发布:2024-11-02 12:51:37 浏览:559
python中字典的用法 发布:2024-11-02 12:40:42 浏览:28
安卓怎么下载zine 发布:2024-11-02 12:40:38 浏览:793