菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻

Java 脚本参数

原创
05/13 14:22 更新

Java脚本教程 - Java脚本参数

Java Scripting API允许我们将参数从Java应用程序传递到脚本引擎,反之亦然。

将参数从Java代码传递到脚本

msg 是print()函数中使用的变量。

脚本不声明 msg 变量。

我们可以通过几种方式将参数传递给脚本引擎。

一种方法是使用脚本引擎的 put(String paramName,Object paramValue)方法,它接受两个参数:

  • 参数的名称,它需要与脚本中变量的名称匹配。
  • 参数的值。

要将名为 msg 的参数传递给脚本引擎,请按如下所示调用put()方法:

engine.put("msg", "Hello from Java program");

以下代码显示了如何将参数从Java程序传递到脚本。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Main {
  public static void main(String[] args) {
    // Get the Nashorn engine
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");

    String script = "print(msg)";
    try {
      engine.put("msg", "Hello from Java program");
      engine.eval(script);
    } catch (ScriptException e) {
      e.printStackTrace();
    }
  }
}

上面的代码生成以下结果。

图片.png

将名为msg的参数传递给JRuby中的脚本。

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("jruby");

String script = "puts($msg)";
engine.put("msg", "Hello from Java");

// Execute the script
engine.eval(script);

例子

传递给脚本的Java对象的属性和方法可以在脚本中访问。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Main {
  public static void main(String[] args) throws Exception{
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");

    String script = "print(msg.toUpperCase());print(msg.indexOf("a"))";
    engine.put("msg", "lmonkey.com");
    engine.eval(script);
  }
}

上面的代码生成以下结果。
1489818583410707.png

将参数从脚本传递到Java代码

脚本引擎可以将全局范围变量传递给Java代码。

ScriptEngineget(String variableName)方法可以访问Java代码中的这些变量。

它返回一个Java对象。

全局变量的声明是与脚本语言相关的。

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class Main {
  public static void main(String[] args) throws Exception {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");

    String script = "var year = 2015";

    engine.eval(script);
    Object year = engine.get("year");
    System.out.println("year"s class:" + year.getClass().getName());
    System.out.println("year"s value:" + year);
  }
}

上面的代码生成以下结果。

图片.png

综合评分:9.9 评分 请对本文进行纠错,及学习过程中有困难疑惑可在此进行讨论