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

时间:2013-05-16 06:10:23

标签: java javascript interface rhino

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。这在技术上是否可行?

1 个答案:

答案 0 :(得分:1)

对于界面......

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