跳到主要內容

Java 8 JavaScript Engine 引入 Java Class 的方法變更

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 中的做法

留言