Nashorn简介
引入了Java 8和名為“ Nashorn”的新JavaScript引擎。 Nashorn基于Da Vinci Machine,該項目旨在為JVM添加動態語言支持。 Nashorn是使混合軟件比以前更輕松的一個很好的里程碑。 該引擎的出色功能使您能夠在Java(任何其他編譯語言)代碼和javascript之間進行全雙工通信。
使用Nashorn的最簡單方法是JDK 8或OpenJDK 8中捆綁的命令行工具,您可以在“ / bin”中找到它。 通過執行jjs,您將面對jjs提示符,提示您可以交互使用Nashorn,也可以將js文件作為參數傳遞給jjs。 您可以在下面找到使用jjs的基本示例:
考慮下面的simple.js文件:
現在,通過調用:jjs simple.js,將在屏幕上顯示“ Nashorn”文本。
我認為jjs足以用于介紹,如果您需要更多信息,可以鍵入jjs -help。
您也可以在Java代碼中使用Nashorn腳本引擎。 考慮下面的Program.java文件:
public class Program {public static void main(String... args) throws ScriptException {ScriptEngineManager factory = new ScriptEngineManager();ScriptEngine nashornEngine = factory.getEngineByName("nashorn");nashornEngine.eval("print('hello world');");} }使用此簡單的代碼,您的屏幕上將會顯示一個非常漂亮的問候世界。 您也可以將js文件評估為腳本引擎,ScriptEngine接口的eval方法具有Reader抽象類類型的重載。 因此,您可以簡單地傳遞任何作為Reader類實例的對象。 考慮以下代碼:
script1.js內容:
var version = 1;function hello(name) {return "hello " + name; }Program.java內容:
public class Program {public static void main(String... args) throws ScriptException, NoSuchMethodException {ScriptEngineManager factory = new ScriptEngineManager();ScriptEngine nashornEngine = factory.getEngineByName("nashorn");nashornEngine.eval(new InputStreamReader(Program.class.getResourceAsStream("script1.js")));System.out.println(nashornEngine.get("version"));Invocable invocable = (Invocable) nashornEngine;Object result = invocable.invokeFunction("hello", "soroosh");System.out.println(result); } }ScriptEngine接口有一個get方法,如您在示例中所注意到的,您可以調用它來檢索ScriptEngine中定義的任何變量或任何狀態。 在上面的示例中,“ version”是在simple.js文件中聲明的變量。
每個腳本引擎都有其自己的ScriptEngine類實現,并且腳本引擎可以實現一些可選接口以擴展其功能。 如果您檢查NashornSriptEngine的源代碼,則類簽名為:
public final class NashornScriptEngine extends javax.script.AbstractScriptEngine implements javax.script.Compilable, javax.script.Invocable因此,Nashorn腳本引擎也使您能夠使用這兩個界面。 在上面的示例中,用于調用在腳本引擎中聲明的函數的示例使用了Invocable接口。
注意: ScriptEngine是有狀態的,因此,如果您在腳本引擎上調用某些函數或評估某些代碼,則對象和變量的狀態可能會影響其結果。
結論:
在這篇文章中,我試圖以一種非常基本和實用的方式介紹Nashorn。在以后的文章中,我將進一步展示Java + Nashorn的互操作性及其在現實世界中的用法。
翻譯自: https://www.javacodegeeks.com/2014/04/introduction-to-nashorn.html
總結
- 上一篇: Java 8功能教程– ULTIMATE
- 下一篇: 更换无线路由器需要怎么操作无线路由器更换