当前位置: 首页 > 面试题库 >

Rhino:在Javascript实作中存取Java介面变数

嵇浩然
2023-03-14
问题内容

Rhino:如何在Javascript实现中访问Java接口变量?

我为其他方公开了Java接口,以使他们为javascript提供相同的实现。

public interface APIInterface{

    public static APIUtils util = new APIUtils();

    public ArrayList getAllObjects(Object aTransaction);
}

JavaScript实现:

/** Core Interface Method **/
new Object() {

  getAllObjects: function(tran) {
        tran.set(..); //OK  
        tran.set(..); //OK
        util.callSomeFunction(); //Fails here..Rhino doesn't understand util.. 
  }

}

我希望接口的javascript实现能够理解接口变量,util而不必将其作为附加参数传递给函数或将其添加到ScriptEngine。这在技术上可行吗?


问题答案:

对于界面…

package foo;
public interface Iface {
  String X = "Hello, World!";
  void invoke();
}

…静态成员¹ X可以通过两种方式访问​​。

1)通过类型:

var x = Packages.foo.Iface.X;

2)通过反射:

var impl = new Packages.foo.Iface({
  invoke : function () {
    var x = this.getClass().getField("X").get(null);
    java.lang.System.out.println(x);
  }
});
impl.invoke();

在Rhino 1.7R4上测试。

¹所有变量都隐含public static final在接口上。



 类似资料:
  • 问题内容: 我们的Java应用程序的一部分需要运行由非开发人员编写的javascript。这些非开发人员正在使用JavaScript进行数据格式化。(主要是简单的逻辑和字符串连接)。 我的问题是如何设置这些脚本的执行,以确保脚本错误不会对应用程序的其余部分产生重大负面影响。 需要防范无限循环 防止产生新线程。 限制访问服务和环境 文件系统(示例:如果心怀不满的脚本编写者决定删除文件) 数据库(用同

  • 我想获取所选框的值,并将其保存在PHP变量中。我想保存并回显变量。请帮忙

  • 问题内容: 我正在使用JDK的javax.script。*包。具体来说,我使用的是JavaScript引擎,据我所读,它似乎是基于Mozilla开发的名为Rhino的JavaScript- in-Java解释器。 我希望完成的工作基本上是使我的JavaScript能够在代码中的某个点“暂停”自身(例如,在函数调用的一半),并且只有在Java允许的情况下稍后才能自我恢复。 为了说明我的意思,请想象以

  • 我的目的是在AdaptOpenJDK 8 VM中提供一个JSR-223 javascript引擎。 所以我想用已经熟悉的犀牛。 并指定在那里下载jsr-223脚本引擎包装器。这里: https://java.net/projects/scripting ,但是这个链接已经死了。 我在哪里可以找到Rhino的JSR-223包装器? 或者可能有更好的替代方案,如JSR-223 JavaScript-E

  • 问题内容: 我有以下内容: 如何将类型为sun.org.mozilla.javascript.internal.NativeArray的结果对象转换为相应的Java数组?Somone可以向我显示一个 工作代码示例 吗?它应该适用于String和Integer数组。另外,很高兴知道在哪里寻找在rhino引擎和java之间的其他数据类型转换。 顺便说一句,我知道此页面,但我真的在寻找一个有效的代码示例

  • 本文向大家介绍JavaScript中的数组操作介绍,包括了JavaScript中的数组操作介绍的使用技巧和注意事项,需要的朋友参考一下 JavaScript中的数组对象自带了一些方法,可以通过使用这些方法来对数组进行操作。   join()   可以使用join()方法将数组中的成员合并到一个字符串中: 从上面的例子中可以看到,如果join()方法不带参数,那么JavaScript会用逗号作为分隔