JDK8在Java轉讓Javascript指令碼引擎動態地定義和運行代碼

來源:互聯網
上載者:User

標籤:

import java.lang.*;import java.util.Arrays;import java.util.List;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;public class ScriptEngineTest {public static void main(String[] args) throws Exception {    ScriptEngineManager sem = new ScriptEngineManager();    ScriptEngine engine = sem.getEngineByName("javascript");     //python or jython, <pre name="code" class="html">   //向上下文中存入變數   engine.put("msg", "just a test");   //定義類user   String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; ";   engine.eval(str);   //從上下文引擎中取值   String msg = (String) engine.get("msg");   String name = (String) engine.get("name");   String[] hb = engine.get("hb");   System.out.println(msg);   System.out.println(name + ":" + hb[0]);   //定義數學函數   engine.eval("function add (a, b) {c = a + b; return c; }");    //取得調用介面    Invocable jsInvoke = (Invocable) engine;  //定義加法函數  Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });  System.out.println(result1);  //調用加法函數,注意參數傳遞的方法  Adder adder = jsInvoke.getInterface(Adder.class);  int result2 = adder.add(10, 35);  System.out.println(result2);  //定義run()函數  engine.eval("function run() {print('www.java2s.com');}");  Invocable invokeEngine = (Invocable) engine;  Runnable runner = invokeEngine.getInterface(Runnable.class);  //定義線程執行之  Thread t = new Thread(runner);  t.start();  t.join();  //匯入其它java包  String jsCode = "importPackage(java.util);  var list2 = Arrays.asList(['A', 'B', 'C']); ";  engine.eval(jsCode);  List<String> list2 = (List<String>) engine.get("list2");  for (String val : list2) { System.out.println(val);}  }}




 指令碼引擎為實現動態功能(如外掛程式機制)提供了良好的擴充性.

有關引擎介面的文檔:

ScriptEngine

著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。

JDK8在Java轉讓Javascript指令碼引擎動態地定義和運行代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.