Java Nashorn 将 java 类(不是实例)暴露给 javascript

标签 java nashorn clearscript

我使用 ClearScript.NET 将类暴露给 Javascript。我用它来公开类(不是类的实例给 JS):engine.AddHostType("Worker", typeof(Worker)); 所以我可以使用 var x = new Worker() ;javascript;

现在在 Nashorn 和 Java 中这不起作用。我只能像这样公开类的实例:factory.getBindings().put("Worker", new Worker());

有没有办法使用 Nashorn 将类类型公开给 javascript。

谢谢!

最佳答案

您的脚本可以通过完全限定名称直接访问任何 Java 类,例如

var Vector = Java.type("java.util.Vector");
// or equivalently:
var Vector = java.util.Vector;
// Java.type is better as it throws exception if class is not found

如果您不希望脚本直接引用您的 Java 类,或者您可能想提供一个不同的名称,您可以这样做:

import javax.script.*;

public class Main {
    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager m = new ScriptEngineManager();
        ScriptEngine e = m.getEngineByName("nashorn");

        // eval "java.util.Vector" to get "type" object and then
        // assign that to a global variable.
        e.put("Vec", e.eval("java.util.Vector"));

        // Script can now use "Vec" as though it is a script constructor
        System.out.println(e.eval("v = new Vec(); v.add('hello'); v"));
    }
}

希望这对您有所帮助!

关于Java Nashorn 将 java 类(不是实例)暴露给 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30945988/

相关文章:

java - 使用速度模板下载时日期格式不正确

java - Nashorn NativeDate 转换为 java.util.Date

c# - 如何在 microsoft.clearscript.v8 中的 jsondata 中使用 linq

c# - 如何捕获 ClearScript.V8 中的更新事件?

java - JTable 滚动到指定的行索引

java - 在挂起状态下启动路由并安排恢复

java - LWJGL碰撞检测缺陷

java - Nashorn JavaScript Invocable.getInterface 在 Web 应用程序中跨类加载器失败

java - 如何在 Java 15 及更高版本中使用 Nashorn?

javascript - 如何在 C# Selenium 中向 FirefoxDriverService 添加配置文件规范?