Java 8 使用了新的JavaScript Engine "Nashorn"
使用上的一些方式跟過去不太一樣
在跑程式碼時發現了過去版本用來引入 Java class 的importClass、importPackage會跳Exception
看了 Open JDK的回報 ScriptEngine throws exception when evaluating importClass and importPackage
Nashorn 採用了不一樣的方式引入 Java class,如果要維持相容性
可以在 JavaScript Engine 建立後執行這段程式碼
try { engine.eval("try {load('nashorn:mozilla_compat.js');} catch (e) {}"); } catch (ScriptException e) {}
因為用try catch包起來,所以如果Rhino讀到這段丟 Exception 會被包起來
這樣 Nashorn 也可以執行過去跑在 Java 上的有引入 Java class 的 JavaScript Code了
至於 Nashorn 的正式引入 Java class 用法看到這篇文章會是
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(
new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
型別會作為一個物件產生,這樣也比較符合 JavaScript 中的做法
使用上的一些方式跟過去不太一樣
在跑程式碼時發現了過去版本用來引入 Java class 的importClass、importPackage會跳Exception
看了 Open JDK的回報 ScriptEngine throws exception when evaluating importClass and importPackage
Nashorn 採用了不一樣的方式引入 Java class,如果要維持相容性
可以在 JavaScript Engine 建立後執行這段程式碼
try { engine.eval("try {load('nashorn:mozilla_compat.js');} catch (e) {}"); } catch (ScriptException e) {}
因為用try catch包起來,所以如果Rhino讀到這段丟 Exception 會被包起來
這樣 Nashorn 也可以執行過去跑在 Java 上的有引入 Java class 的 JavaScript Code了
至於 Nashorn 的正式引入 Java class 用法看到這篇文章會是
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(
new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
型別會作為一個物件產生,這樣也比較符合 JavaScript 中的做法
留言
張貼留言